Middle
Τι είναι η συνοχή και η συσχέτιση στον προγραμματισμό;
sobes.tech AI
Απάντηση από AI
Η συνοχή (Cohesion) είναι ένα μέτρο του πόσο στενά συνδέονται τα στοιχεία μέσα σε ένα module (κλάση, λειτουργία). Υψηλή συνοχή σημαίνει ότι τα στοιχεία του module εστιάζονται στην εκτέλεση μιας μόνο εργασίας ή έννοιας. Ένα καλά σχεδιασμένο module έχει υψηλή συνοχή.
Παραδείγματα επιπέδων συνοχής (από χαμηλό σε υψηλό):
- Τυχαία (Coincidental): Τα στοιχεία συνδέονται τυχαία, χωρίς λογική σύνδεση.
- Λογική (Logical): Τα στοιχεία εκτελούν μια σειρά λογικά συνδεδεμένων ενεργειών, αλλά η επιλογή γίνεται από εξωτερικό κώδικα.
- Χρονική (Temporal): Τα στοιχεία συνδέονται από το ότι εκτελούνται την ίδια χρονική στιγμή.
- Διαδικαστική (Procedural): Τα στοιχεία ακολουθούν μια διαδικασία εκτέλεσης.
- Επικοινωνιακή (Communicational): Τα στοιχεία εργάζονται με τα ίδια δεδομένα.
- Ακολουθιακή (Sequential): Η έξοδος ενός στοιχείου αποτελεί είσοδο για ένα άλλο.
- Λειτουργική (Functional): Όλα τα στοιχεία συμβάλλουν στην εκτέλεση μιας σαφώς ορισμένης λειτουργίας.
Η συσχέτιση (Coupling) είναι ένα μέτρο εξάρτησης μεταξύ διαφορετικών modules. Χαμηλή συσχέτιση σημαίνει ότι τα modules είναι σχετικά ανεξάρτητα. Η μείωση της συσχέτισης καθιστά το σύστημα πιο ευέλικτο, εύκολα διαχειρίσιμο και δοκιμάσιμο.
Παραδείγματα επιπέδων συσχέτισης (από υψηλό σε χαμηλό):
- Με βάση το περιεχόμενο (Content): Ένα module απευθύνεται άμεσα σε εσωτερικά δεδομένα ή υλοποίηση ενός άλλου module.
- Κοινό (Common): Τα modules χρησιμοποιούν κοινό παγκόσμιο χώρο δεδομένων.
- Με βάση τον έλεγχο (Control): Ένα module μεταδίδει ένα σημαία ελέγχου που καθορίζει τη συμπεριφορά ενός άλλου module.
- Με βάση το σφραγίδα (Stamp): Μεταφορά σύνθετων δεδομένων (αντικείμενα, δομές), αλλά το module χρησιμοποιεί μόνο μέρος αυτών.
- Με βάση τα δεδομένα (Data): Μεταφορά απλών δεδομένων ως παραμέτρους.
- Με βάση τα μηνύματα (Message): Τα modules ανταλλάσσουν μηνύματα (π.χ. μέσω γεγονότων, διεπαφών). Αυτή είναι η πιο αδύναμη μορφή συσχέτισης.
Ο στόχος καλού σχεδιασμού: υψηλή συνοχή (εντός των modules) και χαμηλή συσχέτιση (μεταξύ των modules).
<?php
// Παράδειγμα υψηλής συνοχής (Functional Cohesion)
// Αυτό το κλάση εστιάζεται μόνο στην επεξεργασία χρηστών
class UserManager {
private array $users = [];
public function addUser(string $name): void {
$this->users[] = $name;
}
public function getUsers(): array {
return $this->users;
}
public function deleteUser(string $name): void {
$this->users = array_filter($this->users, fn($user) => $user !== $name);
}
}
// Παράδειγμα χαμηλής συσχέτισης (Data Coupling)
// Το 'processOrder' εξαρτάται μόνο από τα δεδομένα που του δίνονται ($orderId, $amount)
class OrderProcessor {
public function processOrder(int $orderId, float $amount): bool {
// Λογική επεξεργασίας παραγγελίας...
// Δεν εξαρτάται άμεσα από την υλοποίηση άλλων κλάσεων,
// μόνο από τα εισερχόμενα δεδομένα.
echo "Processing order ID $orderId with amount $amount\n";
return true;
}
}
// Παράδειγμα όπου τα UserManager και OrderProcessor δεν έχουν ισχυρή εξάρτηση μεταξύ τους.
// Μπορούν να χρησιμοποιηθούν ανεξάρτητα ή μαζί, αλλά οι εσωτερικές τους αλλαγές
// δεν επηρεάζουν πολύ το ένα το άλλο.
?>