Warum objektorientierte Programmierungwird in den meisten Projekten bevorzugt? OOP bietet eine effektive Möglichkeit, mit ihrer Komplexität umzugehen. Anstatt das Programm als eine Folge ausführbarer Anweisungen zu betrachten, stellt es es als eine Gruppe von Objekten mit bestimmten Eigenschaften dar und führt bestimmte Aktionen mit ihnen durch. Dies führt zu klareren, zuverlässigeren und leichter zu verfolgenden Anwendungen.
Grundprinzipien der objektorientiertenProgrammierung (OOP) wurden gebildet, weil bei früheren Ansätzen Einschränkungen gefunden wurden. Unter ihnen - unbegrenzten Zugriff auf Daten und eine große Anzahl von Links, die Einschränkungen bei der Einführung von Änderungen auferlegen. Ihr Bewusstsein und ihre Gründe sind wichtig, um zu verstehen, was OOP in der Programmierung ist und welche Vorteile es hat.
C, Pascal, FORTRAN und ähnliche Sprachen sindverfahrenstechnisch. Das heißt, jeder ihrer Operatoren befiehlt dem Computer, etwas zu tun: die Daten zu erhalten, die Zahlen aufzählen, durch sechs zu teilen, das Ergebnis anzuzeigen. Die prozedurale Sprachanwendung ist eine Liste von Anweisungen. Wenn es klein ist, ist kein anderes organisatorisches Prinzip (oft als Paradigma bezeichnet) erforderlich. Der Programmierer erstellt eine Liste von Anweisungen, und der Computer führt sie aus.
Wenn Anwendungen größer werden, die Listeist umständlich. Nur wenige können mehr als ein paar hundert Anweisungen verstehen, bis sie zusammen gruppiert sind. Aus diesem Grund wurde die Funktion zu einer Möglichkeit, Anwendungen für ihre Ersteller verständlicher zu machen. In einigen Sprachen kann das gleiche Konzept als Unterprogramm oder Prozedur bezeichnet werden.
Die Anwendung ist in Funktionen unterteilt, von denen jede einen klar definierten Zweck und eine klar definierte Schnittstelle hat.
Die Idee der Trennung in Prozeduren kann erweitert werden, indem sie in ein größeres Objekt gruppiert werden, das als Modul bezeichnet wird, aber das Prinzip ist ähnlich: Gruppieren von Komponenten, die Anweisungslisten ausführen.
Die Trennung in Funktionen und Module ist einer der Eckpfeiler der strukturellen Programmierung, die vor der Einführung von OOP mehrere Jahrzehnte lang ein präemptives Paradigma war.
Als Anwendungen wuchsen zunehmendgroße, strukturelle Programmierung begann Schwierigkeiten zu erfahren. Projekte wurden zu kompliziert. Die Graphen verschoben sich. Eine größere Anzahl von Programmierern war beteiligt. Die Komplexität wuchs. Die Kosten explodierten, die Grafik bewegte sich weiter und der Zusammenbruch kam.
Eine Analyse der Ursachen für diese Ausfälle ergab MängelVerfahrensparadigma. Unabhängig davon, wie gut ein strukturierter Ansatz für die Programmierung implementiert wird, werden große Anwendungen zu komplex.
Was sind die Ursachen für diese Probleme?Verfahrenssprachen? Erstens haben Funktionen unbegrenzten Zugriff auf globale Daten. Zweitens modellieren nicht verwandte Verfahren und Bedeutungen nicht die reale Welt.
Wenn wir diese Probleme im Zusammenhang mit betrachtenProgramm der Bestandsbuchhaltung, dann ist eines der wichtigsten globalen Datenelemente die Aggregation von Rechnungseinheiten. Verschiedene Funktionen können auf sie zugreifen, um einen neuen Wert einzugeben, anzuzeigen, zu ändern und so weiter.
In einem Programm, das zum Beispiel in C geschrieben ist, gibt es zwei Arten von Daten. Lokale sind in der Funktion verborgen und andere Prozeduren werden nicht verwendet.
Wenn auf zwei oder mehr Funktionen zugegriffen werden sollzu den gleichen Daten, dann muss Letzteres global sein. Dies sind beispielsweise Informationen über die zu berücksichtigenden Punkte. Auf globale Daten kann mit jedem Verfahren zugegriffen werden.
In einem großen Programm gibt es viele Funktionen und viele globale Elemente. Das Problem mit dem Verfahrensparadigma ist, dass dies zu einer noch größeren Anzahl von möglichen Verbindungen zwischen ihnen führt.
Solch eine große Anzahl von Verbindungen verursachtein paar Schwierigkeiten. Erstens erschwert dies das Verständnis der Struktur des Programms. Zweitens macht es schwierig, Änderungen vorzunehmen. Bei einer Änderung eines globalen Datenelements müssen möglicherweise alle Funktionen angepasst werden, die darauf zugreifen können.
Zum Beispiel im Buchführungsprogramm entscheidet jemand, dass der Codedes abgerechneten Betreffs sollte nicht aus 5, sondern aus 12 Ziffern bestehen. Dies erfordert eine Änderung des Datentyps von kurz auf lang. Jetzt müssen die Code-bezogenen Funktionen geändert werden, um mit dem neuen Format zu arbeiten.
Wenn sich Elemente in einer großen Anwendung ändern,Es ist schwer zu sagen, welche Verfahren Zugang zu ihnen haben. Aber selbst wenn dies geklärt ist, kann eine Änderung zu einer falschen Arbeit mit anderen globalen Daten führen. Alles ist mit allem anderen verbunden, so dass eine Veränderung an einem Ort in einem anderen stattfindet.
Das zweite und wichtigere Problem des VerfahrensDas Paradigma ist, dass die Lokalisierung von individuellen Daten und Funktionen die Dinge in der realen Welt schlecht abbildet. Hier beschäftigen wir uns mit Objekten wie Menschen und Autos. Sie sehen nicht wie Daten oder Funktionen aus. Komplexe reale Objekte haben Attribute und Verhalten.
Beispiele für Attribute (manchmal auch alsEigenschaften) für Menschen sind Augenfarbe und Berufsbezeichnung, für Autos - Leistung und Anzahl der Türen. Wie sich herausstellte, entsprechen die Attribute in der realen Welt den Daten im Programm. Sie haben spezifische Bedeutungen wie Blau (Augenfarbe) oder Vier (die Anzahl der Türen).
Verhalten ist, dass die Objekte der realen Weltals Reaktion auf einen Effekt produzieren. Wenn Sie die Behörden auffordern, ihre Gehälter zu erhöhen, lautet die Antwort "Ja" oder "Nein". Wenn Sie die Bremse drücken, stoppt das Auto. Aussprache und Stopp sind Beispiele für Verhalten. Verhalten ist wie eine Prozedur: Es ist aufgerufen, etwas zu tun, und es tut es. Somit modellieren Daten und Funktionen selbst keine reellen Objekte effizient.
Objekt in OOP wird als Sammlung dargestelltDaten und Funktionen. Nur Prozeduren, die in C ++ Memberfunktionen genannt werden, können Sie ihre Werte abrufen. Daten sind versteckt und vor Änderungen geschützt. Werte und Funktionen sind in einer Einheit zusammengefasst. Kapselung und Verstecken sind die Hauptbegriffe in der Beschreibung von OO-Sprachen.
Wenn Sie die Daten ändern möchten, wissen Sie genau, welche Funktionen mit ihnen interagieren. Keine anderen Prozeduren können auf sie zugreifen. Dies vereinfacht das Schreiben, Debuggen und Pflegen des Programms.
Die Anwendung besteht in der Regel aus mehreren Objekten, die miteinander interagieren und die Elementfunktionen aufrufen.
Heute die am weitesten verbreitete Sprache von OOP(objektorientierte Programmierung) - C ++ (plus-plus). Java enthält einige Funktionen wie Zeiger, Vorlagen und Mehrfachvererbung, wodurch es weniger leistungsfähig und vielseitiger als C ++ ist. C # hat die Popularität von C ++ noch nicht erreicht.
Es sei darauf hingewiesen, dass die sogenannteElementfunktionen in C ++ werden in anderen OO-Sprachen wie Smalltalk als Methoden bezeichnet. Datenelemente werden Attribute genannt. Beim Aufruf einer Objektmethode wird eine Nachricht an sie gesendet.
Sie können Objekte an die Abteilungen des Unternehmens senden. In den meisten Organisationen arbeiten Mitarbeiter nicht einen Tag mit Kadern, der nächste auf Gehaltsliste und dann eine Woche im Einzelhandel. Jede Abteilung hat ihre eigenen Mitarbeiter mit klar zugewiesenen Verantwortlichkeiten. Es gibt auch eigene Daten: Gehälter, Verkaufszahlen, Mitarbeiterdaten usw. Die Mitarbeiter in den Abteilungen arbeiten mit ihren Informationen. Die Trennung des Unternehmens erleichtert somit die Kontrolle über seine Aktivitäten und bewahrt die Integrität der Daten. Das Rechnungswesen ist für die Abrechnung zuständig. Wenn Sie die Gesamtsumme der Löhne kennen müssen, die im Juli in der südlichen Filiale gezahlt wurden, müssen Sie nicht im Archiv stöbern. Es reicht aus, dem Verantwortlichen eine Notiz zu schicken, zu warten, bis diese Person Zugriff auf die Daten erhält und eine Antwort mit den erforderlichen Informationen sendet. Dies gewährleistet die Einhaltung der Vorschriften und das Fehlen von Störungen von außen. Auf die gleiche Weise stellt das Objekt in der OOP die Organisation der Anwendung bereit.
Es sollte daran erinnert werden, dass die Ausrichtung auf Objekte nicht istbetrifft die Einzelheiten des Programms. Die meisten C ++ - Anweisungen entsprechen prozeduralen Sprachoperatoren wie C. Tatsächlich sind Elementfunktionen in C ++ den Funktionen in C sehr ähnlich. Nur ein breiterer Kontext erlaubt es festzustellen, ob der Befehl prozedural oder objektorientiert ist.
Bei der Betrachtung des Programmierproblems fürOO Sprache, statt Fragen über ihre Aufteilung in separate Funktionen, entsteht das Problem der Trennung in Objekte. OOP-Denken erleichtert die Entwicklung von Anwendungen erheblich. Dies liegt an der Ähnlichkeit von Software und realen Objekten.
Was werden Objekte in OOP? Im Folgenden sind typische Kategorien aufgeführt.
Das physische Objekt in OOP ist:
Elemente der Computerumgebung des Benutzers:
Leute:
Daten:
Die Verbindung zwischen realen Objekten und OOP war das Ergebnis einer Kombination von Funktionen und Daten: Sie revolutionierten die Programmierung. In den Verfahrenssprachen gibt es keine so enge Korrespondenz.
Objekte in OOP sind Mitglieder von Klassen. Was bedeutet das? Programmiersprachen haben eingebaute Datentypen. Der int-Typ, dh eine Ganzzahl, ist in C ++ vordefiniert. Sie können eine beliebige Anzahl von int-Variablen deklarieren.
In ähnlicher Weise wird eine Gruppe von Objekten der gleichen Klasse definiert. Sie definiert die Funktionen und Daten, die in ihren Objekten enthalten sind, ohne sie zu erstellen, genauso wie int keine Variablen erzeugt.
Die Klasse in OOP ist eine Beschreibung einer Anzahl ähnlicher Objekte. Prinz, Sting und Madonna sind Sänger. Es gibt keine einzige Person mit diesem Namen, aber Menschen können so genannt werden, wenn sie die entsprechenden Eigenschaften haben. Das OOP-Objekt ist eine Instanz der Klasse.
Im Leben sind Klassen in Unterklassen unterteilt. Zum Beispiel werden Tiere in Amphibien, Säugetiere, Vögel, Insekten usw. unterteilt.
Das Prinzip dieser Art von Teilung ist dasJede Unterklasse hat gemeinsame Merkmale mit der Klasse, aus der sie hervorgeht. Alle Autos haben Räder und einen Motor. Dies sind die bestimmenden Merkmale von Fahrzeugen. Zusätzlich zu den allgemeinen Merkmalen hat jede Unterklasse ihre eigenen Merkmale. Busse haben viele Sitze, und LKWs haben Platz zum Tragen schwerer Lasten.
Ähnlich kann die Basisklasse ein Elternteil werdenmehrere abgeleitete Unterklassen, die so definiert werden können, dass sie ihre Eigenschaften mit ihren eigenen teilen. Die Vererbung ähnelt einer Funktion, die das prozedurale Programm vereinfacht. Wenn mehrere Teile des Codes fast identisch sind, können Sie die gemeinsamen Elemente extrahieren und in eine Prozedur einfügen. Drei Anwendungsabschnitte können eine Funktion aufrufen, um gemeinsame Aktionen auszuführen, sie können jedoch auch eigene Operationen erzeugen. In ähnlicher Weise enthält die Basisklasse Daten, die der abgeleiteten Gruppe gemeinsam sind. Wie Funktionen reduziert die Vererbung das OO-Programm und verdeutlicht die Verknüpfung seiner Elemente.
Nachdem die Klasse erstellt und debuggt wurde, kann dies geschehenan andere Programmierer zur Wiederverwendung in ihren eigenen Anwendungen weitergegeben werden. Dies ähnelt einer Bibliothek von Funktionen, die in verschiedenen Anwendungen enthalten sein können.
In OOP ist Vererbung eine Erweiterung der IdeeMehrfachnutzung. Aus der bestehenden Klasse, ohne sie zu ändern, können Sie eine neue mit dem Zusatz von anderen Funktionen erstellen. Die einfache Wiederverwendung bestehender Software ist ein wichtiger Vorteil von OOP. Es wird angenommen, dass dies zu einer Erhöhung der Rendite aus der Erstinvestition führt.
Objekte sind praktisch zum Erstellen neuer Datentypen. Angenommen, das Programm verwendet zweidimensionale Werte (z. B. Koordinaten oder Breiten- und Längengrade), und es besteht der Wunsch, mit ihnen arithmetische Operationen auszudrücken:
position1 = Position + Ursprung,
Position1, Position und Ursprung sind Paare unabhängiger numerischer Werte. Wenn Sie eine Klasse erstellen, die diese beiden Werte enthält und Variablen mit ihren Objekten deklariert, wird ein neuer Datentyp erstellt.
Operatoren = (gleich) und + (plus) verwendet inPositionsarithmetik, verhalten Sie sich nicht wie bei integrierten Typen wie int. Objektposition usw. sind nicht vordefiniert, sondern programmiert. Wie können diese Bediener mit ihnen umgehen? Die Antwort ist, dass Sie für sie neue Verhaltensmuster definieren können. Diese Operationen werden Elementfunktionen der Position-Klasse sein.
Verwendung von Operatoren oder Verfahren inabhängig davon, mit was sie arbeiten, heißt Polymorphismus. Wenn ein vorhandener Operator wie + oder = in der Lage ist, mit einem neuen Datentyp zu arbeiten, wird gesagt, dass er überladen ist. Überladen in OOP ist eine Art Polymorphie. Es ist seine wichtige Eigenschaft.
Das Buch über die OOP "Objektorientierte Programmierung für Dummies" wird es jedem ermöglichen, sich mit diesem Thema näher vertraut zu machen.
</ p>