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


Το Single Responsibility Principle 

Το Single Responsibility Principle είναι ένα από τα βασικά αρχιτεκτονικά πρότυπα του αντικειμενοστραφούς προγραμματισμού που προωθεί την ιδέα ότι μια κλάση ή ένα module θα πρέπει να έχει μόνο ένα λόγο για να αλλάξει. Με άλλα λόγια, κάθε τμήμα του κώδικα θα πρέπει να είναι υπεύθυνο μόνο για ένα συγκεκριμένο καθήκον, προάγοντας έτσι την συντηρησιμότητα και την ευαναγνωσιμότητα του κώδικα.

Ας δούμε ένα παράδειγμα σε Java για να κατανοήσουμε καλύτερα το Single Responsibility Principle. Ας φανταστούμε μια εφαρμογή για τη διαχείριση και αποθήκευση σημειώσεων.

Σε αυτό το παράδειγμα, έχουμε τρεις κλάσεις, καθεμία από τις οποίες εκτελεί ένα συγκεκριμένο ρόλο. Η κλάση Note είναι υπεύθυνη για τον προσδιορισμό της δομής μιας σημείωσης. Η κλάση NoteStorage αναλαμβάνει την αποθήκευση των σημειώσεων, ενώ η κλάση NotePrinter αναλαμβάνει την εκτύπωση των σημειώσεων.

Με αυτόν τον τρόπο, κάθε κλάση έχει έναν μόνο σκοπό και αλλάζει μόνο εάν αλλάζει αυτός ο σκοπός, τηρώντας έτσι το Single Responsibility Principle.