Как вы познали ООП ?

  • Автор теми Автор теми Honorocker
  • Дата створення Дата створення
Статус: Офлайн
Реєстрація: 10.11.2007
Повідом.: 947
Как вы познали ООП ?

Доброго времени суток коллеги-программисты . Собственно вопрос к гуру и просто хорошим людям которые считают что ООП для них уже пройденный этап : Как вы его полностью освоили ?

Предыстория ..

В свое время баловался многими языками , с начала это был паскаль , потом python , php, java script и в данный момент засел я за С++ ,да и не просто засел , а забросил эту глупую идею с тремя "w" и решил прямой дорожкой идти в мир 2d/3d разработки . Достал старый учебники по линейной алгебре , справочник Дейтела , скачал библию Опен ГЛ и ... в который раз я остановился на этом ООП . Нет , ну образно я понимаю что есть класс , у класса есть свойства и методы , ака переменные и ф-ции . Понимаю что есть иерархия классов и в принципе понимаю что такое наследование . Инкапсуляция тоже не повергла меня в какой-то шок . Но вот как , как это применить на реальном проекте ? С чего начинать , как придумать правильный класс , как и когда нужно его применять это ООП , я не могу понять .

Вопрос знатокам , как вы постигли эту чертову парадигму ? Возможно на примере какого-то проекта или очень умную книгу прочитали , или что еще , просветите лоботряса пожалуйста !
 
только через практику, это интуитивно должно идти, когда вам нужен массив целых чисел вы же его объявляете, а не булевое значение, вот подобным образом и ооп должно врости в мозг, а вообще не заморачивайтесь по этому поводу, всегда найдется тот у кого ооп круче :)
 
никак. это нельзя познать. понять можно. Это способ представления, а не вычисления. Как представлять землю в роли части солнечной системы, которая в свою очередь песчинка в галактике с такими же по образу, но не по свойствам. Либо представлять как нечто, что несут слоны на плывущей черепахе.
 
Это просто подход. Умение применять его нарабатывается только практикой. Создаёте одну, две, пять неудачных иерархий классов. Набиваете шишки. Начинаете видеть прошлые ошибки при очередной разработке и стараетесь избежать их. При этом изучаете методологии проектирования, шаблоны, начинаете всё больше и больше автоматически разбирать автоматизируемые процессы с данными в классы и интерфейсы.

attachment.webp


У кого-то сразу мозги повёрнуты в эту сторону, и ему легче. Он не понимает реляционную алгебру, у него крыша едет от функционального или логического программирования. Зато выделить абстракцию и на её основе сделать иерархию — это пожалуйста, на уровне мозжечка.

Кому-то приходится учить теорию и нарабатывать навык.

А кто-то вообще прекрасный дизайнер или гений управления производством и проектами. Но до сих пор ему не даёт покоя, что он никак не может освоить эти гадские инкапсуляцию, наследование и полиморфизм.
 
Спасибо за познавательные посты . С++ действительно сложный язык , но если не спешить, а постепенно вчитываться в каждое предложение , то даже такая бяка как указатели не пугают . А вот ООП , ну что ж ,попытаюсь написать проект в связке c++/openGL , есть у меня парочка идей . Еще раз всем спасибо .
 
Способ простой - несколько лет разбираешься в чужих классах, читаешь литературу по паттернам. Потом еще несколько лет пытаешься писать классы на основе изученных подходов. Потом лет 5 педалишь код оттачивая умение в мелочах. Вот и весь секрет...
 
Возможно на примере какого-то проекта или очень умную книгу прочитали , или что еще , просветите лоботряса пожалуйста !
Как уже сказали - чтение само по себе ничего не дает, но поскольку чтиво на эту тему весьма легкое, то можно и почитать.
Что-то вроде такого
⚠ Тільки зареєстровані користувачі бачать весь контент та не бачать рекламу.

Паттерны, запахи и прочее ООД - все там.
Начать лучше, наверно, с код комплит или прагматик праграмер.
 
Для изучения ООП лучше Java или C#. В C++ больше времени уйдет на возню с указателями. Только не надо пудрить себе мозги всякими паттернами, большинство которых высосано из пальца для того чтобы книга потолще была.
А вообще ООП - это просто парадигма програмирования, не стоит рассматривать это как некое сакральное знание доступное избранным жрецам. Через несколько лет вообще может рулить функциональное программирование вместо ООП.
Когда я изучал програмирование никто подобных вопросов не ставил - люди просто програмировали. Изучать ООП как то даже звучит через ****. Помню когда изучал С++ по Страуструпу учил не ООП а синтаксические конструкции которые позволяют програмировать таким способом.
 
Для понимания концепции ООП очень хорошо подходит иерархия классов в какой-нибудь RPG игрушке.

Вот есть карта. На карте расположены объекты: игроки, NPC, сундучки, графические эффекты. Все объекты имеют свойство "месторасположение на карте". Значит делаем базовый класс TWorldObject. Сундучки игрок может открывать, с графическими эффектами игрок никак не взаимодействует. Значит делаем отдельные классы TGameObject, TWorldGraphicEffect и наследуем их от TWorldObject. Далее NPC ничем не отличается от игрока, кроме того, что NPC управляется компьютером, а игрок - живым человеком. Поэтому наследуем от класса TWorldObject класс TWorldNPC, а от него в свою очередь наследуем TWorldPlayer. Ну и прописываем методы и поля для классов в зависимости от потребностей.

Вот так примерно работает ООП.
 
На всякий случай: в картинке выше главное -- это не C++, а "изучить за 21 день". ТС сейчас где-то между 22-ым и 697-ым днём. :)
 
Для понимания концепции ООП очень хорошо подходит иерархия классов в какой-нибудь RPG игрушке.

Вот есть карта. На карте расположены объекты: игроки, NPC, сундучки, графические эффекты. Все объекты имеют свойство "месторасположение на карте". Значит делаем базовый класс TWorldObject. Сундучки игрок может открывать, с графическими эффектами игрок никак не взаимодействует. Значит делаем отдельные классы TGameObject, TWorldGraphicEffect и наследуем их от TWorldObject. Далее NPC ничем не отличается от игрока, кроме того, что NPC управляется компьютером, а игрок - живым человеком. Поэтому наследуем от класса TWorldObject класс TWorldNPC, а от него в свою очередь наследуем TWorldPlayer. Ну и прописываем методы и поля для классов в зависимости от потребностей.

Вот так примерно работает ООП.

Вам отдельный респект , подали отличную идею для изучения , жаль пока знания 2d/3d очень ограничены , но можно сделать подобную вещь в текстовом режиме ...
 
Как уже сказали - чтение само по себе ничего не дает, но поскольку чтиво на эту тему весьма легкое, то можно и почитать.
Что-то вроде такого
⚠ Тільки зареєстровані користувачі бачать весь контент та не бачать рекламу.

Паттерны, запахи и прочее ООД - все там.
Начать лучше, наверно, с код комплит или прагматик праграмер.

Только чтение это будет иметь толк после того, как человек попрактикуется в программировании некоторое время.
 
Дико плюсую тем, кто советует начать учить ООП на Яве. Да, и очень профитабельно в наши дни на андроид, например, писать... Так, что, ТС, дерзайте:)
 
Ну я нарыл сейчас учебник Лафоре , там есть небольшие но интересные задачки . Пока-месть провожу досуг над ними , дабы набить руку . Вот довольно детская задачка , написанная мною минут за 20
⚠ Тільки зареєстровані користувачі бачать весь контент та не бачать рекламу.
, стараюсь с каждой задачей повышать уровень . В общем всё идёт своим чередом =)

Пс. Спасибо всем отписавшимся .
Ппс. Очень заинтересовала идея Deamon , насчет РПГ-игрушки , засяду как только , так сразу за неё =)
 
Останнє редагування:
Гради Буч, "Объективно-ориентированное проектирование".

без практики, правда, преимущества неочевидны, все время думал - ну и что, я же то же самое могу сделать привычно-процедурно, зачем огород городить? :)
но вы пока не заморачивайтесь, попытайтесь понять, как это работает, а потом уже с практикой поймете, зачем :)
 
Начинал с Delphi, потом - PHP
 
но вы пока не заморачивайтесь, попытайтесь понять, как это работает, а потом уже с практикой поймете, зачем
Вообще то сначала надо понять зачем. Как запрограмиравать том - дело техники.
 
Спасибо за познавательные посты . С++ действительно сложный язык , но если не спешить, а постепенно вчитываться в каждое предложение , то даже такая бяка как указатели не пугают . А вот ООП , ну что ж ,попытаюсь написать проект в связке c++/openGL , есть у меня парочка идей . Еще раз всем спасибо .

А шо в Указателяз такого? Парадигму ООП надо понять и простить :) Шож будет када вы доберетесь до шаблонов?
 
Назад
Зверху Знизу