SOLID και το Open / Close 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 συμβάλλει στη δημιουργία ευανάγνωστου, επεκτάσιμου, συντηρήσιμου και ευέλικτου κώδικα.


Το Open / Close Principle

Το Open/Closed Principle (OCP) είναι μια από τις πέντε (5) αρχές του SOLID, τα οποία αποτελούν ένα σύνολο αρχών για τον σχεδιασμό λογισμικού. Το OCP αναφέρει ότι μια κλάση πρέπει να είναι ανοιχτή για επέκταση, αλλά κλειστή για τροποποίηση. Αυτό σημαίνει ότι πρέπει να είναι δυνατή η προσθήκη νέας λειτουργικότητας χωρίς να αλλάξει τον υπάρχον κώδικας.

Ένα παράδειγμα σε Java θα μπορούσε να είναι ένα σύστημα υπολογισμού αμοιβής εργαζομένου με διάφορους τύπους εργαζομένων. Έστω ότι έχουμε μια βασική κλάση Employee:


Τώρα, ας υλοποιήσουμε δύο υποκλάσεις για διάφορους τύπους εργαζομένων, χωρίς να τροποποιούμε την Employee κλάση:


Με αυτόν τον τρόπο, μπορούμε να προσθέσουμε νέους τύπους εργαζομένων χωρίς να αλλάξουμε την υπάρχουσα κλάση Employee. Αυτό σέβεται το Open/Closed Principle καθώς προσθέτουμε νέα λειτουργικότητα χωρίς να αλλάζουμε τον υπάρχον κώδικα.