Eine Frage an die OOP-Experten. - Seite 24

 

Trotzdem verstehe ich nicht, was "Objekt" in der OOP ist.

Dort steht: "Ein Objekt ist eine Instanz einer Klasse". Eine Klasse kann viele Instanzen haben. Diese Instanzen sind jedoch nur Verweise auf die Klasse. Eine Klasse enthält Felder. Die Felder sinddie Eigenschaften des Objekts. Methoden sind Maschinenelemente, die die Werte bestimmter Objekteigenschaften verarbeiten.

Nach meinem Verständnis ist ein Objekt eine benannte (oder nummerierte) Menge von Eigenschaften. Eigenschaftswerte werden durch verschiedene große Blockmechanismen gehandhabt. Das ist im Grunde das Gleiche. Nur ist es anders geschrieben. In OOP wird die Funktionalität um ihrer Kapselung willen fragmentiert. In meinem Fall ist es umgekehrt - Zusammenlegung von Funktionen.

Wenn wir die Frage in einen Grafikbereich verwandeln, ist die Klasse CButton die gleiche wie mein Element Button. In meiner Implementierung sind es drei Objekte im Kernel, jedes mit einer Reihe von Eigenschaften. In einer Klasse ist es auch eine Liste von Eigenschaften (Feldern), Methoden der Schaltfläche (ich habe keine Methoden, die separat zu der Schaltfläche gehören. Die Schaltflächenfunktionalität befindet sich in globalen Funktionsblöcken). In diesen Blöcken wird die Schaltfläche wie jedes andere Element behandelt, aber an bestimmten Stellen hat sie ihre eigenen Bedingungen und Handler. In der OOP wird die gleiche Funktionalität einer Schaltfläche in einer Klasse gekapselt, auf die über Instanzen zugegriffen wird.

 
Реter Konow:

George, in jeder Bibliothek, in jeder Lösung, gibt es ein Konzept. Wenn ich das Konzept eines anderen nehme und versuche, auf seiner Grundlage mein eigenes zu entwickeln, kann es zu einem Konzeptabsturz kommen, weil ein System, das auf zwei oder mehr Konzepten aufbaut, nicht stabil sein kann. Deshalb müssen innovative Dinge selbst und von Grund auf entwickelt werden. Um nicht mit den "generischen" Fehlern und Ungereimtheiten der anderen Autoren zu kämpfen.

Peter, du streitest vergeblich. Es ist unmöglich, etwas zu beweisen. Ich verstehe auch nicht diesen Ansatz zur Programmierung, wenn statt _Symbol sie vorschlagen, CSymbolInfo Bibliothek zu verbinden und schreiben object.Name().

Ich verstehe nicht, wie man solche Methoden zum Beispiel verwenden kann

//+------------------------------------------------------------------+
//| Set the property value "SYMBOL_SELECT"                           |
//+------------------------------------------------------------------+
bool CSymbolInfo::Select(const bool select)
  {
   return(SymbolSelect(m_name,select));
  }

Worin besteht die Schwierigkeit beim Schreiben?

SymbolSelect("Нужный символ", включить или выключить);

Und in beiden Fällen nur eine Zeile Code.

Andererseits hat Artyom mir OOP-Möglichkeiten gezeigt, in denen ich mich verirrt habe, nichts verstanden habe und auch nicht verwende

 
Petros Shatakhtsyan:

Nicht so sehr.

Ich erkläre es auf eine andere Weise. Normalerweise erklärt das niemand so.

Alle Programmierer wissen, was zum Beispiel int x ist;

Stellen wir uns nun vor, dass das Wort int der Name einer Klasse ist, und was beschreibt es?

1. eine ganze Zahl

2. benötigt 4 Bytes im Speicher

3. nimmt Werte +- innerhalb bestimmter Grenzen an. (so viel reicht schon);

Und wenn wir int x; schreiben, dann deklarieren wir ein Objekt x, Typ int . x belegt physisch bereits ein 4-Byte-Feld im RAM.

Ich danke Ihnen. In diesem Fall ist eine Klasse eine gekapselte Einheit, ein Container, der im Wesentlichen ein Objekt an sich ist, das in einer hierarchischen Beziehung zu anderen Objektklassen steht. Eine Klasse beschreibt ihre Entität durch Eigenschaften (Felder) und Methoden (gekapselte Funktionalität), die von der Funktionalität anderer Objekte getrennt sind.
 
Alexey Viktorov:

Peter, du streitest vergeblich. Es ist unmöglich, etwas zu beweisen. Ich verstehe auch nicht diesen Ansatz zur Programmierung, wenn statt _Symbol sie vorschlagen, CSymbolInfo Bibliothek zu verbinden und schreiben object.Name()

Ich verstehe nicht, wie man solche Methoden zum Beispiel verwenden kann

Worin besteht die Schwierigkeit beim Schreiben?

In beiden Fällen gibt es nur eine einzige Codezeile.

Andererseits hat mir Artyom OOP-Möglichkeiten gezeigt, in denen ich mich verirrt habe, nichts verstanden habe und die ich nicht verwende.

Nichts :)) Ich versuche, das Konzept von OOP zu verstehen, um Unterschiede und Ähnlichkeiten mit meinem Konzept zu finden. Ich denke, es wird mein Wissen bereichern.))
 
Реter Konow:
In dieser Variante des Sinns ist die Klasse ein Lager für Werkzeuge, Materialien, Rohstoffe und Maschinen. Hierarchie der vererbten Klassen - wie die Werkstätten einer "Fabrik".

Peter, warum willst du auf solche Feinheiten eingehen?

Eine Klasse ist eine Beschreibung eines Objekts, seiner Eigenschaften und der Methoden zum Einstellen und Zugreifen auf diese Eigenschaften.

Ein Objekt ist, wenn wir eine Variable einer Klasse deklarieren oder ein neues Objekt dieser Klasse mit dem Operator new erstellen.

Dies ist zum Beispiel eine Klasse:

//+------------------------------------------------------------------+
class CClass
  {
//--- Приватные члены класса. Доступны только в объекте этого класса
private:
   int               m_type;  // Тип объекта

//--- Защищённые члены класса. Доступны в объекте этого класса и его наследниках
protected:
   string            m_name;  // Имя объекта

//--- Публичные члены класса. Доступны везде
public:
   void              SetType(const int type)          { this.m_type=type;     }
   int               GetType(void)              const { return this.m_type;   }
   void              SetName(const string name)       { this.m_name=name;     }
   string            GetName(void)              const { return this.m_name;   }
  };
//+------------------------------------------------------------------+

Sie hat nur zwei Klassenmitglieder - Typ und Name. Dies sind seine Eigenschaften. Und es ist noch kein Objekt. Es ist ein Plan, eine Blaupause, eine Blaupause... des zukünftigen Objekts.

Wir erstellen ein Objekt:

CClass   class_obj;                 // Объявили переменную class_obj с типом класса CClass. Теперь class_obj - это объект

Wir erstellen ein Objekt und einen Zeiger auf dieses Objekt:

CClass  *class_ptr = new CClass();  // Оператором new создали новый объект класса CClass, и в переменную class_ptr получили на него указатель. 
                                    // Теперь в памяти сидит объект CClass, и получить к нему доступ можно по этому указателю, 
                                    // и по этому же указателю обязательно удалить объект по завершении работы оператором delete
 
Wie ich bereits sagte, ist die OOP-Sicht auf das Objekt weiter gefasst als mein Konzept. Ich hatte nur mit grafischen Objekten zu tun, mit einer eintönigen Reihe von Eigenschaften. OOP bietet eine Sicht auf jede Entität durch das Konzept des Objekts. Das ist natürlich großartig, denn jede Entität ist ein Objekt. Natürlich bin ich gegen eine übermäßige Kapselung und Fragmentierung der Objektfunktionalität. Warum? Ja, denn dadurch werden die Mechanismen weniger effizient. Aber allein schon die Möglichkeit, das Objekt in einem breiteren Kontext zu betrachten, reizt mich.
 
Реter Konow:

George, in jeder Bibliothek, in jeder Lösung, gibt es ein Konzept. Wenn ich das Konzept eines anderen nehme und versuche, darauf aufbauend mein eigenes zu entwickeln, kann es zu einem Konzeptabsturz kommen, weil ein System, das auf zwei oder mehr Konzepten aufbaut, nicht stabil sein kann. Deshalb müssen innovative Dinge selbst und von Grund auf entwickelt werden. Um nicht mit den "generischen" Fehlern und Ungereimtheiten der anderen Autoren zu kämpfen.

Es gibt nur sieben (!) Noten. Und wie viel Musik ist auf ihnen? Und kein Komponist denkt an den Zusammenbruch. Er schreibt einfach Musik, die in der Seele spielt. Er erfindet nicht etwas anderes, sondern verwendet diese sieben Noten.

 
Artyom Trishkin:

Peter, warum willst du auf solche Feinheiten eingehen?

Eine Klasse ist eine Beschreibung eines Objekts, seiner Eigenschaften und der Methoden zum Einstellen und Zugreifen auf diese Eigenschaften.

Ein Objekt ist, wenn wir eine Variable einer Klasse deklarieren oder ein neues Objekt dieser Klasse mit dem Operator new erstellen.

Dies ist zum Beispiel eine Klasse:

Sie hat nur zwei Klassenmitglieder - Typ und Name. Dies sind seine Eigenschaften. Und es ist noch kein Objekt. Es ist ein Plan, eine Blaupause, eine Blaupause... ...eines zukünftigen Objekts.

Wir erstellen ein Objekt:

Wir erstellen ein Objekt und einen Zeiger auf dieses Objekt:

Eine Klasse ist eine Beschreibung eines Objekts. Gut. Enthält die Eigenschaften und Funktionen des Objekts. Gut. All dies ist geordnet, offen oder geschützt.

Dann ist das OBJEKT selbst nicht mehr im Blickfeld. Sie steht im Zusammenhang mit dem Unterricht. Im Zusammenhang mit seinem Namen und seiner Beschreibung. Das heißt, in OOP, das Objekt, ist genau eine Reihe von Attributen (nicht nur Eigenschaften, sondern auch funktionale Elemente - Methoden), aber mehr bestellt und gekapselt, als ich habe. (Das ergibt für mich mehr Sinn).

 
Alexey Viktorov:

Ich verstehe den Einsatz von SB-Methoden wie

warum ist es schwierig zu schreiben

das Konzept von OOP beinhaltet, dass man einfach nicht schreibt - man muss die Implementierung der Methode nicht kennen (in Ihrem Beispiel return(SymbolSelect(m_name,select))

Stellen Sie sich das anstelle dieser Zeile vor:

SymbolSelect("Нужный символ", включить или выключить);

Sie müssen eine Menge Abfragen, verschiedene Prüfungen usw. durchführen. - Sie werden Zeit brauchen, um Ihre eigene Bibliothek zu schreiben und das Material zu studieren.

Angenommen, Ihre Aufgabe besteht darin, nur eine Methode der vorgefertigten Lösung in Form einer Klasse zu verwenden - Sie erstellen eine Instanz der Klasse (Objekt) und verwenden die vorgefertigte Methode Select(const bool select)

Wenn Sie solche Operationen nicht durchführen wollen, geben Sie Speicher frei = löschen Sie das Objekt

Angenommen, Ihre Aufgabe besteht darin, eine Schaltfläche anzuzeigen, durch deren Betätigung Sie das Symbol in der Marktbeobachtung aktivieren/deaktivieren ---> Erstellen Sie Ihre eigene Klasse und kapseln Sie sie mit einer vorgefertigten Schaltflächenklasse und einer fertigen CSymbolInfo-Klasse - das ist alles - die Aufgabe ist erledigt

Das OOP-Paradigma gibt Ihnen nur allgemeine Informationen darüber, was Sie mit einer Klasse tun können - wenn Sie CSymbolInfo nicht kapseln wollen, können Sie es in Ihre eigene Klasse erben


HH: Der Sinn von OOP ist es, ein bestimmtes Problem schnell und ohne Kenntnis der Implementierung zu lösen.

 
Реter Konow:

Eine Klasse ist eine Beschreibung eines Objekts. Gut. Enthält die Eigenschaften und Funktionen des Objekts. Gut. All dies ist geordnet, offen oder geschützt.

Dann ist das OBJEKT selbst nicht mehr im Blickfeld. Sie steht im Zusammenhang mit dem Unterricht. Im Zusammenhang mit seinem Namen und seiner Beschreibung. Das heißt, in OOP, das Objekt, ist genau eine Reihe von Attributen (nicht nur Eigenschaften, sondern auch funktionale Elemente - Methoden), aber mehr bestellt und gekapselt, als ich habe. (Das ergibt für mich mehr Sinn).

Man muss Bücher lesen, um die Dinge zu verstehen. Mindestens VC++ in 21 Tagen.

Mein Rat für das erste Mal ist, MFC zu verwenden, erstellen Sie eine Windows-Anwendung auf der Grundlage von CDialog, die Schaffung aller Arten von Objekten und sehen, wie einfach sie zu verwalten sind.

Danach werden Sie Ihr Vorhaben verwerfen. Leider.