OOPの専門家に質問です。 - ページ 24

 

それにしても、OOPの「Object」って何なんだろう。

オブジェクトはクラスのインスタンスである」と書かれています。クラスは多くのインスタンスを持つことができます。しかし、これらのインスタンスは、クラスへの参照に過ぎません。クラスはフィールドを含む。フィールドは、オブジェクトのプロパティ である。メソッドは、特定のオブジェクトのプロパティの値を処理するエンジン要素です。

私の理解では、オブジェクトは名前付き(または番号付き)プロパティのセットです。プロパティ値は、様々なビッグブロック機構によって処理される。基本的には同じことです。ただ、書き方が違うだけです。OOPでは、そのカプセル化のために機能が断片化されます。私の場合は、その逆で、機能を統合しています。

質問をグラフィックエリアにすると、CButtonクラスは私の要素Buttonと同じになります。私の実装では、カーネルの中に3つのオブジェクトがあり、それぞれにいくつものプロパティがあります。また、クラス内では、ボタンのプロパティ(フィールド)、メソッドのリスト(ボタンに別途所属するメソッドは持っていません。ボタン機能はグローバルファンクションブロックの中にあります)。これらのブロックでは、ボタンは他の要素と同じように扱われますが、特定の場所で、個人的な条件とハンドラを持ちます。OOPでは、同じボタン機能がインスタンスを通してアクセスするクラスにカプセル化されています。

 
Реter Konow:

ジョージ どの図書館にも、どのソリューションにも、コンセプトがあります。なぜなら、2つ以上のコンセプトの上に成り立つシステムは安定しないからです。そのため、革新的なものは自分で、ゼロから開発しなければならないのです。他の著者の「一般的」な誤りや矛盾に悩まされないようにするためです。

ピーター 無駄な議論をしていますね。何かを証明することは不可能です。また、_Symbolを使う代わりに、CsymbolInfo ライブラリを接続してobject.Name()を書けというのは、このプログラミングのやり方が理解できない。

例えば、このような方法を使うのは理解できません。

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

書くことの難しさとは

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

そして、どちらの場合もコードは1行だけです。

一方、ArtyomはOOPの可能性を示してくれましたが、私は迷子になり、何も理解できず、現在では使っていません。

 
Petros Shatakhtsyan:

そうでもないんです。

ここで、別の説明をしておきましょう。普通は誰もそんなふうに説明しない。

プログラマーは皆、例えば int xが 何であるかを知っている。

ここで、intという 単語がクラスの名前のようなものだと想像してみましょう。 そして、それは何を表しているのでしょうか?

1. 整数

2. メモリに4バイトを占有する

3. ある範囲内で+-の値をとる。(それだけで十分です)。

そして、 int x;と書くと、int 型のオブジェクトxを 宣言していることになる。xは すでに物理的にRAMの4バイトのフィールドを占有している。

ありがとうございます。この場合、クラスはカプセル化された実体であり、本質的にそれ自体がオブジェクトであり、他のオブジェクトクラスと階層的な関係にあるコンテナである。クラスは、プロパティ(フィールド)とメソッド(カプセル化された機能)を通じて、他のオブジェクトの機能から分離された実体を記述するものである。
 
Alexey Viktorov:

ピーター 無駄な議論をしていますね。何かを証明することは不可能です。また、_Symbolを使う代わりに、CsymbolInfoライブラリを接続して、object.Name()を書けというのは、このプログラミングのやり方が理解できない。

このようなメソッドを使用することは理解できません。

書くことの難しさとは

どちらの場合も、コードは1行だけです。

一方、ArtyomはOOPの可能性を示してくれましたが、私は迷い、何も理解できず、現在では使っていません。

何もない :))OOPのコンセプトを理解し、自分のコンセプトとの違いや共通点を見つけようとしている。知識を豊かにしてくれると思うからです))
 
Реter Konow:
このような意味で、クラスは道具、材料、原料、機械などの倉庫であると言えます。継承されたクラスの階層 - 「工場」のワークショップのようなもの。

ピーター どうしてそんな微妙なことを言うんだ?

クラスは、オブジェクトと そのプロパティ、およびそれらのプロパティを設定したりアクセスしたりするためのメソッドを記述した ものである。

オブジェクトとは、クラス型の変数を宣言したり、new演算子でそのクラスの新しいオブジェクトを作成したりすることである。

例えば、これはクラスです。

//+------------------------------------------------------------------+
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;   }
  };
//+------------------------------------------------------------------+

クラスメンバはtypeとnameの2つだけである。これがその特性です。しかも、まだオブジェクトではない。計画であり、青写真であり、設計図であり...。を、未来のオブジェクトの

オブジェクトを作成します。

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

オブジェクトとそれへのポインタを作成します。

CClass  *class_ptr = new CClass();  // Оператором new создали новый объект класса CClass, и в переменную class_ptr получили на него указатель. 
                                    // Теперь в памяти сидит объект CClass, и получить к нему доступ можно по этому указателю, 
                                    // и по этому же указателю обязательно удалить объект по завершении работы оператором delete
 
先ほども言ったように、OOPのObjectの考え方は、私の概念よりも広いものです。私は、単調なプロパティを持つグラフィカルなオブジェクトしか扱わなかった。OOPは、Objectという概念を通して、あらゆる実体を見ることができる。もちろん、これは素晴らしいことです。なぜなら、どんなエンティティもObjectだからです。 もちろん、過剰なカプセル化やオブジェクト機能の断片化には反対です。なぜ?そう、機構の効率が悪くなるからです。しかし、より広い文脈で「物体」を見ることができる可能性そのものに魅力を感じます。
 
Реter Konow:

ジョージ どの図書館にも、どのソリューションにも、コンセプトがあります。なぜなら、2つ以上のコンセプトの上に成り立つシステムは安定しないからです。 そのため、革新的なものは自分で、ゼロから開発しなければならないのです。他の著者の「一般的」な誤りや矛盾に悩まされないようにするためです。

ノートは7つ(!)しか ない。また、音楽はどのくらい入っているのでしょうか?そして、崩壊のことを考える作曲家はいない。彼はただ、魂に響く音楽を書くだけだ。彼は他の何かを発明するのではなく、その7つの音を使っているのです。

 
Artyom Trishkin:

ピーター どうしてそんな微妙なことを言うんだ?

クラスは、オブジェクトと そのプロパティ、およびそれらのプロパティを設定したりアクセスしたりするためのメソッドを記述した ものである。

オブジェクトとは、クラス型の変数を宣言したり、new演算子でそのクラスの新しいオブジェクトを作成したりすることである。

例えば、これはクラスです。

クラスメンバはtypeとnameの2つだけである。これがその特性です。しかも、まだオブジェクトではない。計画であり、青写真であり、設計図であり...。...未来のオブジェクトの

オブジェクトを作成します。

オブジェクトとそれへのポインタを作成します。

クラスは、オブジェクトの記述である。よかったです。オブジェクトのプロパティと機能が含まれる。オッケーです。これらはすべて、命令され、開かれ、あるいは保護されています。

そうすると、OBJECT(オブジェクト)自体が絵から外れてしまいます。それは、授業の中でのことです。その名前と説明の文脈で。つまり、OOPでは、オブジェクトは、まさに属性(プロパティだけでなく、機能的要素であるメソッド)の集合であるが、私が持っているよりも順序よく、カプセル化されているのである。(その方が理にかなっている)。

 
Alexey Viktorov:

などのSBメソッドの使い方がよくわからない。

かきにくいのはなぜか

OOPのコンセプトは、ただ書かないということを意味します。

このセリフの代わりに想像してみてください。

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

クエリや各種チェックを多く行う必要があります。- そのため、自分でライブラリを書いたり、資料を調べたりする時間がかかります

クラス形式で用意されたソリューションのメソッドを1つだけ使うというタスクがあるとします。クラスのインスタンス(オブジェクト)を作成し、用意された Select(const bool select) メソッドを使用します。

そのような操作をしないのであれば、メモリを解放する=オブジェクトを削除する

例えば、ボタンを表示し、それを押すことでマーケットウォッチのシンボルを有効/無効にするタスクがあるとします ---> クラスを作成し、既製のボタンクラスと既製のCSymbolInfoクラスをカプセル化します - タスクは完了です。

OOPパラダイムは、クラスで何ができるかという一般的な情報しか与えない。もしCSymbolInfoをカプセル化したくないなら、自分自身のクラスに継承することができる


HH:OOPの要点は、与えられた問題を、実装の知識がなくても素早く解決することです。

 
Реter Konow:

クラスは、オブジェクトの記述である。よかったです。オブジェクトのプロパティと機能が含まれる。オッケーです。これらはすべて、命令され、開かれ、あるいは保護されています。

そうすると、OBJECT(オブジェクト)自体が絵から外れてしまいます。それは、授業の中でのことです。その名前と説明の文脈で。つまり、OOPでは、オブジェクトは、まさに属性(プロパティだけでなく、機能的要素であるメソッド)の集合であるが、私が持っているよりも順序よく、カプセル化されているのである。(その方が理にかなっている)。

本を読まないとわからないことがある。せめてVC++を21日以内に。

初めての方へのアドバイスとしては、MFCを使って、CDialogを ベースにしたWindowsアプリケーションを作り、いろいろな種類のオブジェクトを作って、その管理がいかに簡単かを見てみることです。

その後、ベンチャーを捨てることになる。残念ながら。