SOLID και το Liskov Substitution Principle

 Τι είναι το SOLID στον προγραμματισμό

Το SOLID είναι ένα ακρωνύμιο που περιγράφει ένα σύνολο αρχών για τον σχεδιασμό και την οργάνωση του κώδικα σε αντικειμενοστραφή προγραμματισμό. Οι πέντε αυτές αρχές έχουν διατυπωθεί από τον Robert C. Martin και αποτελούν βασικές κατευθυντήριες αρχές για τη δημιουργία ευέλικτου, εύκολα συντηρήσιμου και επεκτάσιμου κώδικα. Το SOLID αναπαριστά τα πέντε ακόλουθα πρότυπα:

Single Responsibility Principle - SRP:

Μια κλάση θα πρέπει να έχει μόνο ένα λόγο για να αλλάξει. Αυτό σημαίνει ότι μια κλάση θα πρέπει να είναι υπεύθυνη μόνο για ένα συγκεκριμένο καθήκον.

Open/Closed Principle - OCP:

Λέει ότι μια κλάση θα πρέπει να είναι ανοικτή για επέκταση αλλά κλειστή για τροποποίηση. Αυτό σημαίνει ότι θα πρέπει να είναι δυνατή η επέκταση της συμπεριφοράς μιας κλάσης χωρίς να αλλάξει ο υπάρχον κώδικας.

Liskov Substitution Principle - LSP:

Λέει ότι ένα αντικείμενο του υποτύπου (subclass) θα πρέπει να μπορεί να χρησιμοποιηθεί αντί του αντικειμένου της υπερκλάσης (superclass) χωρίς να επηρεαστεί η σωστή λειτουργία του προγράμματος.

Interface Segregation Principle - ISP:

Λέει ότι μια κλάση δεν θα πρέπει να είναι υποχρεωμένη να υλοποιεί διεπαφές που δεν χρησιμοποιεί. Σε άλλα λόγια, περιορίζει το μέγεθος των διεπαφών, ώστε οι κλάσεις να υλοποιούν μόνο τις μεθόδους που χρειάζονται.

Dependency Inversion Principle - DIP:

Λέει ότι μια κλάση δεν θα πρέπει να εξαρτάται από συγκεκριμένες υλοποιήσεις, αλλά από αφαιρετικά (αναφορές σε διεπαφές ή αφαιρετικές κλάσεις). Αυτό προάγει την επαναχρησιμοποίηση του κώδικα και τη μείωση των εξαρτήσεων.

Η συμμόρφωση προς τις αρχές του SOLID συμβάλλει στη δημιουργία ευανάγνωστου, επεκτάσιμου, συντηρήσιμου και ευέλικτου κώδικα.


Αρχή Αντικατάστασης Liskov 

Η αρχή της αντικατάστασης Liskov (Liskov Substitution Principle - LSP) είναι ένα από τα πέντε θεμέλια των αρχών του SOLID, που αναπτύχθηκαν από την Barbara Liskov το 1987. Σκοπός της αρχής αυτής είναι να διασφαλίσει ότι οι υποκατηγορίες μπορούν να χρησιμοποιηθούν αντί για τις γονικές κλάσεις χωρίς να προκαλούν προβλήματα στο πρόγραμμα.

Η αρχή αυτή διατυπώνεται ως εξής: "Αν S είναι υποκατηγορία της T, τότε τα αντικείμενα του T μπορούν να αντικατασταθούν με αντικείμενα του S χωρίς να επηρεαστεί η σωστή λειτουργία του προγράμματος."

Ένα παράδειγμα σε Java θα βοηθήσει να κατανοήσουμε πώς μπορούμε να εφαρμόσουμε αυτή την αρχή στον κώδικα.


Στο παραπάνω παράδειγμα, η κλάση Car είναι μια υποκατηγορία της κλάσης Vehicle. Η μέθοδος operateVehicle δέχεται ένα αντικείμενο τύπου Vehicle και καλεί τη μέθοδο startEngine. Σύμφωνα με το Liskov Substitution Principle, μπορούμε να περάσουμε ένα αντικείμενο τύπου Car ως όρισμα στην operateVehicle χωρίς να προκαλέσουμε προβλήματα. Αυτό δείχνει ότι η υποκατηγορία Car μπορεί να αντικαταστήσει τη γονική κλάση Vehicle χωρίς να επηρεάσει τη σωστή λειτουργία του προγράμματος.