Обсуждение статьи "Основы объектно-ориентированного программирования" - страница 2

 
Urain:

Кстати я удивлён что такие основоположные парадигмы, не освещены в описании ООП в справке.

а надо ли? это ведь не ООП, а следствие его применения в вашем воспрятии моделей.
 
Urain:

1 Не, не оно, это использование наследования.

2 уже теплее, это Композиция, которая является одним из трёх вариантов связывания, наряду с Ассоциацией и Агрегацией.

Кстати я удивлён что такие основоположные парадигмы, не освещены в описании ООП в справке.

Это скорее трюки программирования, а не непосредственные возможности ООП.

Что касается агрегации:

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

Вложенные объекты нового класса обычно объявляются закрытыми, что делает их недоступными для прикладных программистов, работающих с классом. С другой стороны, создатель класса может изменять эти объекты, не нарушая при этом работы существующего клиентского кода. Кроме того, замена вложенных объектов на стадии выполнения программы позволяет динамически изменять её поведение. Механизм наследования такой гибкостью не обладает, поскольку для производных классов устанавливаются ограничения, проверяемые на стадии компиляции.

На базе агрегирования реализуется методика делегирования, когда поставленная перед внешним объектом задача перепоручается внутреннему объекту, специализирующемуся на решении задач такого рода. 

http://ru.wikipedia.org/wiki/Агрегирование_(программирование) 

Так это и есть дух ООП которым пронизано все ООП.
 
sergeev:

справку по структурам откройте. а также приведение типов почитайте, про структуры.

члены методы были доступны с самого начала. Зачем их хотите убрать?

ИМХО, Вы меня с кем-то спутали.
 
Urain:

Ассоциация и другие способы связывания классов.

Ну и зачем оно ) . Вот паттерны это да, но это уже не уровень начинающих.
Integer:

Один момент:

m_size.

Префикс m_ в общепринятых соглашениях об именовании приставляется членам-данным класса. Предназначен по большей части для явного отличия в методах локальных переменных от данных класса.

Документация по MQL5: Основы языка / Переменные / Локальные переменные
Документация по MQL5: Основы языка / Переменные / Локальные переменные
  • www.mql5.com
Основы языка / Переменные / Локальные переменные - Документация по MQL5
 
Integer:
Прям таки функции можно писать в структуре? Наверно указатели на класс - видел, пробовал, лучше об этом не знать.
Попробуйте - и писать и вызывать можно. И нужно.
 
Urain:

Почему коды не прогнаны через стайлер?

Новичку читать будет проблемно, в МЕ он видит один стиль, а в статье другой.

ЗЫ В статье не раскрыты вопросы связи классов.

А вообще конечно, ООП сложная тема, очень не просто её описать простым языком, но с чего то нужно начинать.


стиль исходников поправлен
 
TheXpert:
Ну и зачем оно ) . Вот паттерны это да, но это уже не уровень начинающих.

Один момент:

m_size.

Префикс m_ в общепринятых соглашениях об именовании приставляется членам-данным класса. Предназначен по большей части для явного отличия в методах локальных переменных от данных класса.


Префикс m_ использовался при программировании под MFC, применялся к private и protected переменным, никаких других "общепринятых" соглашений нет. После ухода MFC со сцены обо всех этих дурацких m_ все, слава богу, забыли )) Кто не верит - качаем примеры и убеждаемся (там есть раздел и по MFC) http://archive.msdn.microsoft.com/vcsamples

Visual C++ Samples and Related Documentation for Visual Studio 2010 - Home
  • archive.msdn.microsoft.com
French, German, Italian, Japanese, Korean, Russian, Simplified Chinese, Spanish, Traditional Chinese The Microsoft Visual C++ 2010 Sample Library provides code examples for applications and tools showing the capabilities of Visual C++ and the libraries and technologies it supports. Visual Studio 2010 Samples are now live! Click on the links...
 
VDev:

Префикс m_ использовался при программировании под MFC, применялся к private и protected переменным, никаких других "общепринятых" соглашений нет. После ухода MFC со сцены обо всех этих дурацких m_ все, слава богу, забыли )) Кто не верит - качаем примеры и убеждаемся (там есть раздел и по MFC) http://archive.msdn.microsoft.com/vcsamples

та не. При чем тут MFC?  https://ru.wikipedia.org/wiki/%D0%92%D0%B5%D0%BD%D0%B3%D0%B5%D1%80%D1%81%D0%BA%D0%B0%D1%8F_%D0%BD%D0%BE%D1%82%D0%B0%D1%86%D0%B8%D1%8F

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

Венгерская нотация — Википедия
  • ru.wikipedia.org
Суть венгерской нотации сводится к тому, что имена идентификаторов предваряются заранее оговорёнными префиксами, состоящими из одного или нескольких символов. При этом, как правило, ни само наличие префиксов, ни их написание не являются требованием языков программирования, и у каждого программиста (или коллектива программистов) они могут быть...
 

Очень нужная статья!

Предлагаю разработчикам создать новую категорию для статей. Что-то вроде "Основы (теория) программирования"...

 

1) подумалось, здесь ошибка:

раздел: Передача параметров в конструктор

"Функция Init() отставлена в секции private для обеспечения возможности переинициализации класса."

возможно:

Функция Init() отставлена в секции public для обеспечения возможности переинициализации класса. 

 2) Приведите, пожалуйста, пример использования возможности "создать массив с экземплярами классов (объектами)", для раздела" Массив объектов". Сам, к сожалению, не могу сообразить "с чем это едят".

3) в разделе "Еще об инкапсуляции (private, protected, public)" вскользь обозначено базовый класс->класс потомок. Возможно, эту данность (class Class: public CBase) надо в начале раздела объяснить, т.к. позже сообразил.

4) не нашёл:Рис.6. Видимость "лишней" функции (красная стрелка) определяется типом указателя, с помощью которого загружен класс. Этот пример находится в приложении в файле OOP_sDefaultVirtual_1.mq5.

5) Не нашёл четкого указания, что такое библиотека. Видимо, способ хранения класса(классов) функций? т.е. аналогично включаемому файлу, только включаемый файл - хранится в виде исходника, а библиотека в виде скомпилированной dll?

Огромное Спасибо за статью! Особенно порадовало, последовательное изложение материала.

Документация по MQL5: Основы языка / Функции / Передача параметров
Документация по MQL5: Основы языка / Функции / Передача параметров
  • www.mql5.com
Основы языка / Функции / Передача параметров - Документация по MQL5
Причина обращения: