Uma pergunta para os especialistas do OOP. - página 24

 

Ainda assim, não entendo o que "Objeto" está no OOP.

Diz: "Um objeto é uma instância de uma classe". Uma classe pode ter muitas instâncias. Mas, estas instâncias são apenas referências à classe. Uma classe contém campos. Os campos sãoas propriedades do objeto. Os métodos são elementos do motor que lidam com os valores de propriedades específicas do objeto.

No meu entendimento, um objeto é um conjunto nomeado (ou numerado) de propriedades. Os valores de propriedade são tratados por vários mecanismos de grandes blocos. É basicamente a mesma coisa. Somente ela é escrita de maneira diferente. No OOP, a funcionalidade é fragmentada por causa de seu encapsulamento. No meu caso, é vice-versa - fusão de funcionalidades.

Se transformarmos a questão em uma área gráfica, a classe CButton é a mesma do meu elemento Button. Na minha implementação, são três objetos no núcleo, cada um com uma série de propriedades. Na classe, é também uma lista de propriedades (campos), métodos do botão (não tenho métodos pertencentes separadamente ao botão). A funcionalidade dos botões está dentro de blocos funcionais globais). Nesses blocos, o botão é tratado como qualquer elemento, mas em certos lugares ele tem suas condições pessoais e manipuladores. No OOP, a mesma funcionalidade de botão é encapsulada em uma classe acessada através de instâncias.

 
Реter Konow:

George, em cada biblioteca, em cada solução, há um conceito. Se eu pegar o conceito de outra pessoa e tentar desenvolver o meu com base nele, posso ter uma quebra de conceito, porque um sistema construído sobre dois ou mais conceitos não pode ser estável. Portanto, coisas inovadoras têm que ser desenvolvidas por você mesmo e do zero. Para não lutar contra os erros "genéricos" e as inconsistências dos outros autores.

Peter, você está argumentando em vão. É impossível provar nada. Também não entendo esta abordagem de programação quando, em vez de usar _Symbol, sugerem conectar a biblioteca CSymbolInfo e escrever objeto.Name().

Eu não entendo o uso de tais métodos, por exemplo

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

Qual é a dificuldade em escrever

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

E em ambos os casos, apenas uma linha de código.

Por outro lado, Artyom me mostrou possibilidades OOP, nas quais eu me perdi, não entendi nada e não uso

 
Petros Shatakhtsyan:

Não tanto assim.

Aqui está outra maneira de explicar isso. Normalmente ninguém explica dessa forma.

Todos os programadores sabem o que é int x, por exemplo;

Agora vamos imaginar que a palavra int é como o nome de uma classe. O que ela descreve?

1. um número inteiro

2. Ocupa 4 bytes em memória

3. toma valores +- dentro de alguns limites. (isso é o suficiente);

E quando escrevemos int x; então declaramos um objeto x, tipo int . x já ocupa fisicamente um campo de 4 bytes na RAM.

Obrigado. Neste caso - uma classe é uma entidade encapsulada, um recipiente que é essencialmente um Objeto em si mesmo, em uma relação hierárquica com outras classes-objeto. Uma classe descreve sua entidade através de propriedades (campos) e métodos (funcionalidade encapsulada), separados da funcionalidade de outros objetos.
 
Alexey Viktorov:

Peter, você está argumentando em vão. É impossível provar nada. Também não entendo esta abordagem de programação quando em vez de usar _Symbol eles sugerem conectar a biblioteca CSymbolInfo e escrever objeto.Name()

Eu não entendo o uso de tais métodos, por exemplo

Qual é a dificuldade em escrever

Em ambos os casos, há apenas uma linha de código.

Por outro lado, Artyom me mostrou possibilidades OOP, nas quais eu me perdi, não entendi nada e não uso

Nada :)) Tentando entender o conceito de OOP para encontrar diferenças e semelhanças com meu conceito. Acho que isso enriquecerá meu conhecimento)).
 
Реter Konow:
Nesta variante de sentido, a Classe é um armazém de ferramentas, materiais, matérias primas e máquinas. Hierarquia das classes herdadas - como as oficinas de uma "fábrica".

Peter, por que você gostaria de entrar em tais sutilezas?

Uma classe é uma descrição de um objeto, suas propriedades e métodos para definir e acessar essas propriedades.

Um objeto é quando declaramos uma variável do tipo classe, ou criamos um novo objeto dessa classe utilizando um novo operador.

Por exemplo, esta é uma classe:

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

Tem apenas dois membros de classe - tipo e nome. Estas são suas propriedades. E ainda não é um objeto. É um plano, uma planta, um plano... do objeto futuro.

Nós criamos um objeto:

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

Nós criamos um objeto e um ponteiro para ele:

CClass  *class_ptr = new CClass();  // Оператором new создали новый объект класса CClass, и в переменную class_ptr получили на него указатель. 
                                    // Теперь в памяти сидит объект CClass, и получить к нему доступ можно по этому указателю, 
                                    // и по этому же указателю обязательно удалить объект по завершении работы оператором delete
 
Como eu disse antes, a visão OOP do Objeto é mais ampla do que meu conceito. Eu só lidava com objetos gráficos, com um conjunto monótono de propriedades. O OOP oferece uma visão de qualquer entidade através do conceito de Objeto. Isto é, naturalmente, ótimo, porque qualquer entidade é um Objeto. É claro que sou contra o encapsulamento excessivo e a fragmentação da funcionalidade dos objetos. Por quê? Sim, porque torna os mecanismos menos eficientes. Mas, a própria possibilidade de olhar para o Objeto num contexto mais amplo me atrai.
 
Реter Konow:

George, em cada biblioteca, em cada solução, há um conceito. Se eu pegar o conceito de outra pessoa e tentar desenvolver o meu com base nele, posso ter uma quebra de conceito, porque um sistema construído sobre dois ou mais conceitos não pode ser estável. Portanto, coisas inovadoras têm que ser desenvolvidas por você mesmo e do zero. Para não lutar contra os erros "genéricos" e as inconsistências dos outros autores.

Há apenas sete (!) notas. E quanta música está neles? E nenhum compositor pensa em colapso. Ele apenas escreve música que toca na alma. Ele não inventa outra coisa, ele usa essas sete notas.

 
Artyom Trishkin:

Peter, por que você gostaria de entrar em tais sutilezas?

Uma classe é uma descrição de um objeto, suas propriedades e métodos para definir e acessar essas propriedades.

Um objeto é quando declaramos uma variável do tipo classe, ou criamos um novo objeto dessa classe utilizando um novo operador.

Por exemplo, esta é uma classe:

Tem apenas dois membros de classe - tipo e nome. Estas são suas propriedades. E ainda não é um objeto. É um plano, um projeto, um plano... de um objeto futuro.

Nós criamos um objeto:

Nós criamos um objeto e um ponteiro para ele:

Uma classe é uma descrição de um objeto. Bom. Contém as propriedades e a funcionalidade do objeto. Ok. Tudo isso é ordenado, aberto ou protegido.

Então o próprio OBJETO está fora de cogitação. É no contexto da classe. No contexto de seu nome e descrição. Isto é, no OOP, o Objeto, é exatamente um conjunto de atributos (não apenas propriedades, mas também elementos funcionais - métodos), mas mais ordenados e encapsulados do que eu tenho. (Faz mais sentido para mim).

 
Alexey Viktorov:

Eu não entendo o uso de métodos SB, tais como

por que é difícil escrever

o próprio conceito de OOP implica simplesmente não escrever - você não precisa saber a implementação do método (em seu exemplo return(SymbolSelect(m_name,select))

Imagine que, ao invés desta linha:

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

você tem que fazer muitas consultas, várias verificações, etc. - Isso levará tempo para escrever sua própria biblioteca e estudar o material

Suponha que sua tarefa seja usar apenas um método de solução pronta na forma de uma classe - você cria uma instância da classe (objeto) e usa o método Select(const bool select) pronto

Se você não vai realizar tais operações, liberar memória = apagar o objeto

Suponha que sua tarefa seja exibir um botão, apertando-o, você ativa/desativa o símbolo no relógio do mercado ---> crie sua própria classe e encapsule-a com uma classe de botões pronta para uso e classe CSymbolInfo pronta - é isso - a tarefa é feita

O paradigma OOP lhe dá apenas informações gerais sobre o que você pode fazer com uma classe - se você não quiser encapsular o CSymbolInfo, você pode herdá-lo em sua própria classe


HH: O objetivo do OOP é resolver um determinado problema rapidamente e sem conhecimento de implementação.

 
Реter Konow:

Uma classe é uma descrição de um objeto. Bom. Contém as propriedades e a funcionalidade do objeto. Ok. Tudo isso é ordenado, aberto ou protegido.

Então o próprio OBJETO está fora de cogitação. É no contexto da classe. No contexto de seu nome e descrição. Isto é, no OOP, o Objeto, é exatamente um conjunto de atributos (não apenas propriedades, mas também elementos funcionais - métodos), mas mais ordenados e encapsulados do que eu tenho. (Faz mais sentido para mim).

Você tem que ler livros para deixar as coisas claras. Pelo menos VC++ em 21 dias.

Meu conselho pela primeira vez é usar MFC, criar um aplicativo Windows baseado em CDialog, criando todo tipo de objetos e ver como eles são fáceis de gerenciar.

Depois disso, você jogará fora seu empreendimento. Infelizmente.