Objektorientierte Programmierprinzipien

Hallo Habr! Ich heiße Vladislav Rodin. Ich bin derzeit Leiter des Kurses für Hochleistungsarchitekten bei OTUS und unterrichte auch Kurse für Softwarearchitektur.



Speziell für den Beginn des Unterrichts im neuen Stream des Kurses "Architektur- und Designmuster" habe ich das Material eines anderen Autors vorbereitet.






Einführung



Wenn es um klassische Designmuster geht, muss man an die objektorientierte Programmierung selbst denken. Schließlich sind GoF-Muster genau objektorientierte Programmiermuster. Die funktionale Programmierung hat ihre eigenen Muster.



Im Allgemeinen ist alles wie folgt angeordnet: Es gibt selbst eine objektorientierte Programmierung. Er hat Prinzipien. Aus den Prinzipien der objektorientierten Programmierung folgen die von uns analysierten GRASP-Vorlagen (als Option - SOLID-Prinzipien), aus denen wiederum die GoF-Vorlagen folgen. Daraus ergeben sich eine Reihe interessanter Dinge, beispielsweise Unternehmensmuster.



Objektorientiertes Paradigma



Die Definition besagt, dass "objektorientierte Programmierung ein Programmierparadigma ist, bei dem das Grundkonzept der Begriff eines Objekts ist, das mit der Domäne identifiziert wird."



Somit wird das System als eine Menge von Objekten des Subjektbereichs dargestellt, die auf irgendeine Weise miteinander interagieren. Jedes Objekt besteht aus drei Komponenten: Identität, Status und Verhalten.



Der Status eines Objekts ist eine Sammlung aller seiner Felder und ihrer Werte.



Das Verhalten eines Objekts ist die Sammlung aller Methoden der Klasse eines Objekts.



Die Objektidentität unterscheidet ein Klassenobjekt von einem anderen Klassenobjekt. Aus Java-Sicht wird die Methode equals anhand der Identität definiert.



Objektorientierte Programmierprinzipien



Objektorientierte Programmierung hat eine Reihe von Prinzipien. Die Vorstellung von ihrer Anzahl ist unterschiedlich. Jemand behauptet, dass es drei von ihnen gibt (alte Schule von Programmierern), jemand, dass es vier von ihnen gibt (neue Schule von Programmierern):



  1. Abstraktion
  2. Verkapselung
  3. Erbe
  4. Polymorphismus


Ich schlage vor, ausführlicher darüber zu sprechen. Das einzige ist, dass ich vorschlage, die Abstraktion nicht in Betracht zu ziehen, weil ich mich in der alten Schule der Programmierer befinde.



Verkapselung



Entgegen der Meinung vieler Befragter (und manchmal auch der Befragten) ist die Kapselung nicht "wenn alle Felder privat sind". Die Kapselung ist das grundlegendste Prinzip des Software-Designs. Ihre Spuren werden nur auf Mikroebene, aber auch auf Makro-Design-Ebene beobachtet.



Die wissenschaftliche Definition besagt, dass "Kapselung das Prinzip ist, dass jede Klasse und im weiteren Sinne jeder Teil des Systems als" Black Box "betrachtet werden sollte: Der Benutzer einer Klasse oder eines Subsystems sollte nur die Schnittstelle sehen (d. H. Eine Liste deklarierter Eigenschaften und Methoden) ) und nicht in die interne Implementierung eintauchen. "



Es stellt sich also heraus, dass ein direkter Zugriff der Klasse A auf die Felder der Klasse B nicht dazu führt, dass "die Informationssicherheit verletzt wird", sondern dass die Klasse A an das interne Gerät der Klasse B gebunden ist und versucht wird, die interne Struktur der Klasse B zu ändern führt zum Wechsel der Klasse A. Darüber hinaus arbeitet Klasse A nicht nur mit den Feldern der Klasse B, sondern gemäß einer Geschäftslogik. Das heißt, die Logik für die Arbeit mit dem Zustand der Klasse B liegt in der Klasse A, und wenn wir die Klasse B wiederverwenden möchten, kann dies nicht durchgeführt werden, da die Klasse B ohne ein Stück der Klasse A möglicherweise unbrauchbar ist, was dazu führt, dass die Klasse B zusammen mit gegeben werden muss Klasse A. Wenn man dies auf das gesamte System hochrechnet, stellt sich heraus, dass nur das gesamte System wiederverwendet werden kann.



Kapselung ist das am meisten übersehene Prinzip und wird leider nur von wenigen Menschen richtig interpretiert. Sie können die Anzahl der Verknüpfungen zwischen Klassen und Subsystemen minimieren und dementsprechend die unabhängige Implementierung und Änderung von Klassen und Subsystemen vereinfachen.



Erbe



Vererbung ist die Fähigkeit, eine Klasse von einer anderen abzuleiten, während alle Eigenschaften und Methoden der Vorgängerklasse (Oberklasse) erhalten bleiben und bei Bedarf neue Eigenschaften und

Methoden hinzugefügt werden .



Vererbung ist das am meisten überbewertete Prinzip. Es wurde einmal geglaubt, dass "für einen idealen Programmierer der Vererbungsbaum bis ins Unendliche geht und in einem absolut leeren Objekt endet", weil die Menschen einmal nicht sehr gut verstanden haben, dass Vererbung ein Weg ist, eine solche Eigenschaft der realen Welt als Hierarchie auszudrücken, und kein Weg Verwenden Sie den Code erneut, indem Sie die Maschine vom Kühlschrank erben, da beide Elemente einen Griff haben. Es ist wünschenswert, Vererbung nach Möglichkeit zu vermeiden, da Vererbung eine sehr starke Beziehung ist. Um die Anzahl der Vererbungsebenen zu verringern, wird empfohlen, einen Baum von unten nach oben zu erstellen.



Polymorphismus



Polymorphismus ist die Fähigkeit, Nachkommenklassen in einem Kontext zu verwenden, der für die Vorfahrenklasse vorgesehen war.



Hinter der sadistischsten Definition steht die Fähigkeit der Programmiersprache, eine Aufgabe zu zerlegen und if's und switch umzugestalten.






All Articles