给OOP专家的一个问题。 - 页 24

 

不过,我还是不明白OOP中的 "对象 "是什么。

它说 "一个对象是一个类的实例"。一个类可以有很多实例。但是,这些实例只是对类的引用。一个类包含字段。这些字段是对象的属性。方法是处理特定对象属性值的引擎元素。

在我的理解中,一个对象是一个命名(或编号)的属性集。财产价值由各种大块机制处理。这基本上是同一件事。只是写法不同。在OOP中,功能被分割开来,以便进行封装。在我这里,情况正好相反--功能的合并。

如果我们把问题变成一个图形区域,CButton类与我的元素Button相同。在我的实现中,它是内核中的三个对象,每个对象都有一些属性。在类中,它也是一个属性(字段)的列表,按钮的方法(我没有单独属于按钮的方法。按钮功能是在全局功能块内)。在这些块中,按钮被视为任何元素,但在某些地方它有自己的个人条件和处理程序。在OOP中,同样的按钮功能被封装在一个通过实例访问的类中。

 
Реter Konow:

乔治,在每个图书馆,每个解决方案中,都有一个概念。如果我采用别人的概念,并试图在其基础上发展我的概念,我可能会得到一个概念崩溃,因为建立在两个或更多概念上的系统不可能是稳定的。因此,创新的东西必须由自己开发,从头开始。以便不在其他作者的 "通用 "错误和不一致中挣扎。

彼得,你的争论是徒劳的。不可能证明什么。我也不理解这种编程方法,他们建议用CSymbolInfo 库来代替使用_Symbol,并写上object.Name()。

我不理解使用这样的方法,例如

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

写作中的困难是什么?

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

而且在这两种情况下都只有一行代码。

另一方面,Artyom向我展示了OOP的可能性,我在其中迷失了方向,什么都不懂,也不使用

 
Petros Shatakhtsyan:

没有那么多。

这里有另一种解释方式。通常没有人这样解释。

例如,所有程序员都知道 int x 是什么。

现在让我们想象一下,int 这个词就像一个类的名字。 那么它描述的是什么呢?

1. 一个整数

2. 在内存中占用4个字节

3. 在一定范围内取值+-。(这么多就够了)。

而当我们写 int x;时,我们声明一个对象xint 类型。x 已经在RAM中物理上占据了一个4字节的字段。

谢谢你。在这种情况下--类是一个封装的实体,是一个容器,它本身就是一个对象,与其他对象类有层次关系。一个类通过属性(字段)和方法(封装的功能)描述其实体,与其他对象的功能分开。
 
Alexey Viktorov:

彼得,你的争论是徒劳的。不可能证明什么。我也不理解这种编程方法,他们建议用CSymbolInfo库来代替使用_Symbol,并写上object.Name()。

我不理解使用这样的方法,例如

写作中的困难是什么?

在这两种情况下,只有一行代码。

另一方面,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;   }
  };
//+------------------------------------------------------------------+

它只有两个类成员--类型和名称。这些是它的属性。而且它还不是一个物体。这是一个计划,一个蓝图,一个蓝图...。的未来对象。

我们创建一个对象。

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

我们创建一个对象和一个指向它的指针。

CClass  *class_ptr = new CClass();  // Оператором new создали новый объект класса CClass, и в переменную class_ptr получили на него указатель. 
                                    // Теперь в памяти сидит объект CClass, и получить к нему доступ можно по этому указателю, 
                                    // и по этому же указателю обязательно удалить объект по завершении работы оператором delete
 
正如我之前所说,OOP的对象观比我的概念更广泛。我只处理图形对象,有一套单调的属性。OOP通过Object的概念提供了一个对任何实体的看法。这当然很好,因为任何实体都是一个对象。 当然,我反对对对象功能的过度封装和碎片化。为什么?是的,因为它使机制的效率降低。但是,在更广泛的背景下审视《物》的可能性本身就吸引了我。
 
Реter Konow:

乔治,在每个图书馆,每个解决方案中,都有一个概念。如果我采用别人的概念,并试图在其基础上发展我的概念,我可能会得到一个概念崩溃,因为建立在两个或更多概念上的系统不可能是稳定的。 因此,创新的东西必须由自己开发,从头开始。以便不在其他作者的 "通用 "错误和不一致中挣扎。

只有七个(!) 音符。他们身上有多少音乐呢?而且没有作曲家考虑过崩溃的问题。他只是写了一些在灵魂中播放的音乐。他没有发明别的东西,而是使用这七个音符。

 
Artyom Trishkin:

彼得,你为什么要讲这些微妙的事情呢?

类是对一个对象、其属性以及设置和访问这些属性的方法的描述

对象是指我们声明一个类类型的变量,或使用new操作符创建一个该类的新对象。

例如,这是一个班级。

它只有两个类成员--类型和名称。这些是它的属性。而且它还不是一个物体。这是一个计划,一个蓝图,一个蓝图...。......的一个未来对象。

我们创建一个对象。

我们创建一个对象和一个指向它的指针。

一个类是对一个对象的描述。很好。包含该对象的属性和功能。好的。所有这些都是有序的,开放的或保护的。

那么物体本身就不在画面中了。它是在班级的范围内。从其名称和描述来看。也就是说,在OOP中,对象,正是一组属性(不仅是属性,还有功能元素--方法),但比我的更有秩序,更有封装性。(这对我来说更有意义)。

 
Alexey Viktorov:

我不明白使用SB的方法,如

为何难写

OOP的概念本身就意味着不写--你不需要知道方法的实现(在你的例子中,返回(SymbolSelect(m_name,select))

想象一下,而不是这句话。

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

你必须做大量的查询和各种检查等。- 这将花费你的时间来编写你自己的库和研究材料

假设你的任务只是使用一个类形式的现成解决方案中的一个方法--你创建一个类(对象)的实例并使用现成的Select(const bool select)方法

如果你不打算执行这样的操作,释放内存=删除对象

假设你的任务是显示一个按钮,通过按下它,你可以启用/禁用市场观察中的符号------创建你的类并封装现成的按钮类和现成的CSymbolInfo类----任务完成了

OOP范式只给了你一般的信息,你可以对一个类做什么--如果你不想封装CSymbolInfo,你可以把它继承到你自己的类中。


HH:OOP的全部意义在于 快速解决一个给定的问题,而且不需要了解实现。

 
Реter Konow:

一个类是对一个对象的描述。很好。包含该对象的属性和功能。好的。所有这些都是有序的,开放的或保护的。

那么物体本身就不在画面中了。它是在班级的范围内。从其名称和描述来看。也就是说,在OOP中,对象,正是一组属性(不仅是属性,还有功能元素--方法),但比我的更有秩序,更有封装性。(这对我来说更有意义)。

你必须看书才能把事情说清楚。至少在21天内完成VC++。

我的建议是第一次使用MFC,在CDialog 的基础上创建一个windows应用程序,创建各种对象,看看它们是多么容易管理。

之后,你将丢弃你的风险。不幸的是。