Una pregunta para los expertos en POO. - página 24

 

Aún así, no entiendo qué es "Objeto" en la OOP.

Dice "Un objeto es una instancia de una clase". Una clase puede tener muchas instancias. Pero, estas instancias son sólo referencias a la clase. Una clase contiene campos. Los campos sonlas propiedades del objeto. Los métodos son elementos del motor que manejan los valores de propiedades específicas del objeto.

A mi entender, un objeto es un conjunto de propiedades con nombre (o numeradas). Los valores de las propiedades se gestionan mediante varios mecanismos de grandes bloques. Es básicamente lo mismo. Sólo que está escrito de forma diferente. En la POO, la funcionalidad se fragmenta en aras de su encapsulación. En mi caso es al revés: fusión de funciones.

Si convertimos la pregunta en una zona gráfica, la clase CButton es la misma que mi elemento Button. En mi implementación, son tres objetos en el núcleo, cada uno con un número de propiedades. En la clase, es también una lista de propiedades (campos), métodos del botón (no tengo métodos que pertenecen por separado al botón. La funcionalidad de los botones está dentro de los bloques de funciones globales). En estos bloques, el botón se trata como cualquier elemento, pero en ciertos lugares tiene sus condiciones y manejadores personales. En POO, la misma funcionalidad del botón se encapsula en una clase a la que se accede a través de instancias.

 
Реter Konow:

George, en cada biblioteca, en cada solución, hay un concepto. Si tomo el concepto de otra persona y trato de desarrollar el mío sobre su base, podría tener un choque de conceptos, porque un sistema construido sobre dos o más conceptos no puede ser estable. Por lo tanto, las cosas innovadoras tienen que ser desarrolladas por uno mismo y desde cero. Para no tener que luchar con los errores e incoherencias "genéricas" de los otros autores.

Peter, estás discutiendo en vano. Es imposible demostrar nada. Tampoco entiendo este enfoque de programación cuando en lugar de usar _Symbol sugieren conectar la librería CSymbolInfo y escribir object.Name().

No entiendo el uso de tales métodos por ejemplo

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

¿Cuál es la dificultad de escribir

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

Y en ambos casos sólo una línea de código.

Por otro lado, Artyom me mostró las posibilidades OOP, en las que me perdí, no entendí nada y no uso

 
Petros Shatakhtsyan:

No tanto.

Esta es otra forma de explicarlo. Normalmente nadie lo explica así.

Todos los programadores saben lo que es int x, por ejemplo;

Ahora imaginemos que la palabra int es como el nombre de una clase. ¿Qué describe?

1. un número entero

2. ocupa 4 bytes en la memoria

3. toma valores +- dentro de unos límites. (eso es suficiente);

Y cuando escribimos int x; entonces declaramos un objeto x, de tipo int . x ya ocupa físicamente un campo de 4 bytes en la RAM.

Gracias. En este caso, una clase es una entidad encapsulada, un contenedor que es esencialmente un objeto en sí mismo, en una relación jerárquica con otras clases de objetos. Una clase describe su entidad a través de propiedades (campos) y métodos (funcionalidad encapsulada), separados de la funcionalidad de otros objetos.
 
Alexey Viktorov:

Peter, estás discutiendo en vano. Es imposible demostrar nada. Tampoco entiendo este enfoque de programación cuando en lugar de usar _Symbol sugieren conectar la librería CSymbolInfo y escribir object.Name()

No entiendo el uso de tales métodos por ejemplo

¿Cuál es la dificultad de escribir

En ambos casos sólo hay una línea de código.

Por otro lado, Artyom me mostró las posibilidades OOP, en las que me perdí, no entendí nada y no uso

Nada :)) Tratando de entender el concepto de OOP para encontrar diferencias y similitudes con mi concepto. Creo que enriquecerá mis conocimientos).
 
Реter Konow:
En esta variante de sentido, la clase es un almacén de herramientas, materiales, materias primas y máquinas. Jerarquía de clases heredadas - como los talleres de una "fábrica".

Peter, ¿por qué quieres entrar en esas sutilezas?

Una clase es una descripción de un objeto, sus propiedades y los métodos para establecer y acceder a esas propiedades.

Un objeto es cuando declaramos una variable de tipo clase, o creamos un nuevo objeto de esa clase usando el operador new.

Por ejemplo, esta es una clase:

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

Sólo tiene dos miembros de clase: tipo y nombre. Estas son sus propiedades. Y todavía no es un objeto. Es un plan, un plano, un proyecto... del objeto futuro.

Creamos un objeto:

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

Creamos un objeto y un puntero a él:

CClass  *class_ptr = new CClass();  // Оператором new создали новый объект класса CClass, и в переменную class_ptr получили на него указатель. 
                                    // Теперь в памяти сидит объект CClass, и получить к нему доступ можно по этому указателю, 
                                    // и по этому же указателю обязательно удалить объект по завершении работы оператором delete
 
Como he dicho antes, la visión OOP del Objeto es más amplia que mi concepto. Sólo trataba con objetos gráficos, con un conjunto monótono de propiedades. La POO ofrece una visión de cualquier entidad a través del concepto de Objeto. Esto es, por supuesto, genial, porque cualquier entidad es un objeto. Por supuesto, estoy en contra de la encapsulación excesiva y la fragmentación de la funcionalidad de los objetos. ¿Por qué? Sí, porque hace que los mecanismos sean menos eficientes. Pero, la propia posibilidad de contemplar el Objeto en un contexto más amplio me atrae.
 
Реter Konow:

George, en cada biblioteca, en cada solución, hay un concepto. Si tomo el concepto de otra persona y trato de desarrollar el mío sobre su base, podría tener un choque de conceptos, porque un sistema construido sobre dos o más conceptos no puede ser estable. Por lo tanto, las cosas innovadoras tienen que ser desarrolladas por uno mismo y desde cero. Para no tener que luchar con los errores e incoherencias "genéricas" de los otros autores.

Sólo hay siete (¡! ) notas. ¿Y cuánta música hay en ellos? Y ningún compositor piensa en el colapso. Simplemente escribe música que toca en el alma. No inventa nada más, sino que utiliza esas siete notas.

 
Artyom Trishkin:

Peter, ¿por qué quieres entrar en esas sutilezas?

Una clase es una descripción de un objeto, sus propiedades y los métodos para establecer y acceder a esas propiedades.

Un objeto es cuando declaramos una variable de tipo clase, o creamos un nuevo objeto de esa clase usando el operador new.

Por ejemplo, esta es una clase:

Sólo tiene dos miembros de clase: tipo y nombre. Estas son sus propiedades. Y todavía no es un objeto. Es un plan, un plano, un proyecto... ...de un objeto futuro.

Creamos un objeto:

Creamos un objeto y un puntero a él:

Una clase es una descripción de un objeto. Bien. Contiene las propiedades y la funcionalidad del objeto. Bien. Todo esto está ordenado, abierto o protegido.

Entonces, el OBJETO en sí está fuera de la imagen. Es en el contexto de la clase. En el contexto de su nombre y descripción. Es decir, en OOP, el Objeto, es exactamente un conjunto de atributos (no sólo propiedades, sino también elementos funcionales - métodos), pero más ordenados y encapsulados que yo. (Para mí tiene más sentido).

 
Alexey Viktorov:

No entiendo el uso de métodos de SB como

por qué es difícil escribir

el propio concepto de POO implica simplemente no escribir - no es necesario conocer la implementación del método (en tu ejemplo return(SymbolSelect(m_name,select))

Imagina que en lugar de esta línea:

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

hay que hacer muchas consultas, varias comprobaciones, etc. - Esto le llevará tiempo para escribir su propia biblioteca y estudiar el material

Supongamos que su tarea consiste en utilizar un solo método de la solución ya preparada en forma de clase - usted crea una instancia de la clase (objeto) y utiliza el método Select(const bool select) ya preparado

Si no va a realizar estas operaciones, libere memoria = borre el objeto

Supongamos que su tarea es mostrar un botón, al presionarlo, usted activa/desactiva el símbolo en el reloj de mercado ---> cree su clase y encapsule la clase lista botón y la clase lista CSymbolInfo - la tarea está hecha

El paradigma de la programación orientada a objetos (OOP) sólo te da información general sobre lo que puedes hacer con una clase - si no quieres encapsular CSymbolInfo, puedes heredarlo en tu propia clase


HH: El objetivo de la programación orientada a objetos es resolver un problema determinado de forma rápida y sin necesidad de conocer la implementación.

 
Реter Konow:

Una clase es una descripción de un objeto. Bien. Contiene las propiedades y la funcionalidad del objeto. Bien. Todo esto está ordenado, abierto o protegido.

Entonces, el OBJETO en sí está fuera de la imagen. Es en el contexto de la clase. En el contexto de su nombre y descripción. Es decir, en POO, el Objeto, es exactamente un conjunto de atributos (no sólo propiedades, sino también elementos funcionales - métodos), pero más ordenados y encapsulados que yo. (Para mí tiene más sentido).

Hay que leer libros para aclarar las cosas. Al menos VC++ en 21 días.

Mi consejo para la primera vez es usar MFC, crear una aplicación de windows basada en CDialog, creando todo tipo de objetos y ver lo fácil que es manejarlos.

Después de eso, tirarás tu aventura. Desgraciadamente.