Вопрос знатокам ООП. - страница 24

 

Все равно, не доходит до меня, что же в ООП "Объект".

Написано "Объект это экземпляр класса". Класс может иметь множество экземпляров. Но, эти экземпляры просто ссылки на класс. Класс содержит поля. Поля - это свойства объекта. Методы - элементы движка, обрабатывающие значения конктретных свойств объекта.

В моем понимании, объект - именованный (или нумерованный) комплекс свойств. Значения свойств обрабатываются различными механизмами больших блоков. В принципе - тоже самое. Только записывается по другому. В ООП происходит дробление функционала ради его инкапсуляции. У меня - наоборот - объединение функционала.

Если перевести вопрос в область графики, То класс - "CButton" это тоже, что мой элемент Кнопка. В моей реализации, это три объекта в ядре, каждый из которых - ряд свойств. В классе, это тоже список свойств (полей), методов кнопки (у меня методов принадлежащих отдельно кнопке нет. Функционал кнопки находится внутри глобальных функциональных блоков). В этих блоках кнопка обрабатывается как любой элемент, но в определенных местах есть ее личные условия и обработчики. В ООП тот же самый функцонал кнопки, только инкапсулирован в классе, доступ к которому через экземпляры.

 
Реter Konow:

Джорж, в каждой библиотеке, в каждом решении, заложена какая то концепция. Если я беру чужую концепцию и на ее основе пытаюсь развивать свою, я могу получить концептуальный "краш", потому что система, построенная на двух или более концепциях не может быть стабильной. Поэтому, инновационные вещи нужно разрабатывать самому и с нуля. Чтобы не бороться с "родовыми" ошибками и противоречиями остальных авторов.

Петр, вы зря спорите. Доказать ничего невозможно. Я так-же не понимаю такой подход к программированию когда вместо использования _Symbol предлагают подключить библиотеку CSymbolInfo и писать объект.Name()

Не понимаю использования например таких методов СБ

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

в чём сложность написать

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

И в том и другом случае всего одна строка кода.

С другой стороны, Артём мне демонстрировал возможности ООП в которых я заблудился, ничего не понял и не использую

 
Petros Shatakhtsyan:

Не очень так.

Вот объясню по другому. Обычно так никто не объясняет. 

Все программисты знают что такое  например int x;

Теперь представим что слово int это как название класса.  А что он описывает ?  что это:

1. целое число

2. занимает в памяти 4 байта

3. принимает значения +- в каких то пределах. (столько хватит);

И когда мы пишем int x;  то объявляем объект xint типа. x уже физически занимает 4-х байтовое поле в оперативной памяти.

Спасибо. В этом случае - класс это инкапсулированная сущность, контейнер, который по сути - Объект сам по себе, находящийся в иерархической взаимосвязи с другими объетами-классами. Класс описывает свою сущность через свойства (поля) и методы (инкапсулированную фунциональность), отделенную от функциональности других объектов.
 
Alexey Viktorov:

Петр, вы зря спорите. Доказать ничего невозможно. Я так-же не понимаю такой подход к программированию когда вместо использования _Symbol предлагают подключить библиотеку CSymbolInfo и писать объект.Name()

Не понимаю использования например таких методов СБ

в чём сложность написать

И в том и другом случае всего одна строка кода.

С другой стороны, Артём мне демонстрировал возможности ООП в которых я заблудился, ничего не понял и не использую

Ничего.)) Стараюсь понять концепцию ООП, чтобы найти различия и сходства с моей концепцией. Думаю, это обогатит мои знания.))
 
Ре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
 
Как я уже говорил, в ООП взгляд на Объект более широкий, чем в моей концепции. Я имел дело только с графическими объектами, с однообразным набором свойств. ООП предлагает взгляд на любую сущность через понятие Объект. Это конечно здорово, потому что любая сущность есть Объект. Конечно, я против чрезмерной инкапсуляции и дробления функционала объектов. Почему? Да потому что это делает механизмы менее эффективными. Но, сама возможность смотреть на Объект в более широком контексте меня привлекает.
 
Реter Konow:

Джорж, в каждой библиотеке, в каждом решении, заложена какая то концепция. Если я беру чужую концепцию и на ее основе пытаюсь развивать свою, я могу получить концептуальный "краш", потому что система, построенная на двух или более концепциях не может быть стабильной. Поэтому, инновационные вещи нужно разрабатывать самому и с нуля. Чтобы не бороться с "родовыми" ошибками и противоречиями остальных авторов.

Есть всего семь (!) нот. А сколько музыки на них? И ни один композитор не задумывается о крахе. Он просто пишет музыку, играющую в душе. Не придумывает что-то иное, а использует эти семь нот.

 
Artyom Trishkin:

Пётр, зачем вам углубляться в такие тонкости?

Класс - это описание объекта, его свойств и методов установки и доступа к этим свойствам.

Объект - это когда мы объявили переменную с типом класса, или создали новый объект этого класса оператором new.

Например, вот это класс:

В нём всего два члена класса - тип и наименование. Это его свойства. И это ещё не объект. Это план, чертёж, проект... будущего объекта.

Создаём объект:

Создаём объект и указатель на него:

Класс - это описание объекта. Хорошо. Содержит свойства объекта и его функционал. Ок. Все это упорядочено, открыто или защищено.

Тогда САМ ОБЪЕКТ - за кадром. Он в контексте класса. В контексте его названия и описания. То есть в ООП, Объект, - именнованный комплекс атрибутов (не только свойств, но и функциональных элементов - методов), но более упорядоченный и инкапсулированный, чем у меня. (Так мне понятнее).

 
Alexey Viktorov:

Не понимаю использования например таких методов СБ

в чём сложность написать

сама концепция ООП подразумевает как раз и не писать - Вы не должны знать реализацию метода (в Вашем примере return(SymbolSelect(m_name,select)))

представьте, что вместо этой строчки:

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

нужно выполнить очень много запросов, различных проверок и т.п. - на это у Вас уйдет время на написание собственной библиотеки и на само изучение материала

Пусть Ваша задача как раз и сводится всего к использованию одного метода уже готового решения в виде класса - Вы создаете экземпляр класса (обьект) и используете готовый метод Select(const bool select)

Если дальше не предполагается выполнять еще такие операции, освободим память = уничтожим обьект

Пусть Ваша задача сводится к отображению кнопки по нажатию которой Вы включаете / отключаете символ в обзоре рынка ---> создаете свой класс и инкапсулируете в него уже готовый класс кнопка и готовый класс CSymbolInfo - все задача решена

Парадигме ООП дает лишь общие сведения что можно делать с классом - не хотите инкапсулировать CSymbolInfo - ну возьмите наследуйте от него свой класс


ЗЫ: если "на пальцах", то суть ООП - это быстрое решение поставленной задачи без знания реализации

 
Реter Konow:

Класс - это описание объекта. Хорошо. Содержит свойства объекта и его функционал. Ок. Все это упорядочено, открыто или защищено.

Тогда САМ ОБЪЕКТ - за кадром. Он в контексте класса. В контексте его названия и описания. То есть в ООП, Объект, - именнованный комплекс атрибутов (не только свойств, но и функциональных элементов - методов), но более упорядоченный и инкапсулированный, чем у меня. (Так мне понятнее).

Чтобы всё было понятно, надо читать книги. Хотя бы VC++ за 21 день.

Советую на первое время использовать MFC, создавать windows приложение на основе CDialog, создавая всякие объекты и посмотреть как легко они управляются.

После этого будете выбросить вашу затею. К сожалению.

Причина обращения: