Совет начинающему программисту. Как следует подходить к приобритению навыка OOP?

Здравствуйте.

Я начинающий программист. В данный момент прохожу специализацию на курсере "Fundamentals of Computing Specialization".

Сейчас я прохожу 1-ую часть https://www.coursera.org/course/interactivepython1 в который мы делаем игры, не большие <= 300 LOC.

Вот последнее то, что я сделал сам: www.codeskulptor.org/#user39_jGpMRtLwMIR87yo.py
От начала и до конца это мой проект. Идея и проект, всё делал сам.

Мои знания о OOP весьма малы, прочёл пару туториалов в инете и постарался выполнить хорошо насколько мне по силам.

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

Стало ясно, что программирование в OO стиле, навык который требует развития и практики.

Используя свой опыт, поскажите как следует правильно подходить к изучения OOP?

Скажу сразу, я не ищу ответы в стиле "Как освоить быстро". Я сейчас учусь, так что свободного времени у меня много и я хотел посвятить его на развитие своих навыков. Работу я привык выполнять прилежно и добросовестно, так что готов работать усердно.

Я планирую и дальше развиваться в Python, здорово будет увидеть ресурсы с примерами на этом языке. Но, если Вы считаете, что есть некая книга которую следует прочесть даже если она на C++, пишите.

От работы я не бегу. Если надо какую книгу прочесть, пишите. Поработать над каким-то проектом где эти принципы хорошо показаны, пишите.

Я свободно говорю и читаю на английском. Если знаете хороший материал на английском, пишите.

При много благодарен Вам за любые советы и рекомендации.
  • Вопрос задан
  • 6918 просмотров
Пригласить эксперта
Ответы на вопрос 11
@veitmen
Почитал ответы.

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

ООП - лишь еще один инструмент, не думайте что это золотая пуля. Состояние, в целом - зло.
Ответ написан
leahch
@leahch
3D специалист. Dолго, Dорого, Dерьмово.
Ну, для начала почитать паттерны проектирования, они изначально были следаны для явы, некоторые к питону прямо не относятся (в силу того, что на питоне можно вообще без классов, и можно вообще в стиле функционального программирования), но дают хорошую базу именно в ООП. С другой стороны, если в яве дизайн именно ООП, то на питоне иной раз не хочется и класс заводить, а пишешь в стиле функциональщины.
Наверное первое что нужно сделать, изучить области видимости и помечтать как они могут пригодиться...
Ответ написан
Комментировать
@thepry
Ruby on rails, 1С разработчик
https://www.coursera.org/course/interactivepython1

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

Отличный выбор курса!
Ответ написан
@FoxInSox
Сидя на стуле. Начните уже делать что-нибудь.
Ответ написан
Комментировать
@sozforex
Программист, Python
Начальный (но не элементарный) курс по программированию, в котором дается плавный переход от функционального программирования к ООП, объяснена польза ООП, зачем ООП было придумано и как им пользоваться:
www-inst.eecs.berkeley.edu/~cs61a/fa14
Я получил много ценных знаний при прохождении этого курса, хотя и проработал до этого программистом 2 года.
Курс идет вместе с адаптированной под питон книгой SICP (Structure and Interpretation of Computer Programs) со встроенными интерактивными вкусностями.
2 chapter этой книги посвящен ООП и основам, на которых он строится. Рекомендую не перепрыгивать через начало курса/книги.
Ответ написан
@Vladisus
Я бы посоветовал, Python3 Object Oriented Programming (Dusty Phillips), хорошая книга. Ну и конечно практика, питайтесь все задачи решать с помощью ООП...
Еще идете на codewars и там находите задачи на ООП, на python их мало и они легкие, поэтому смотрите условие с задач по другим языкам и решаете на python
Ответ написан
@sputnic
Android Developer
Начните с : "Гради Буч: Объектно-ориентированный анализ и проектирование"
Ответ написан
Комментировать
@jaxel
Фримен Эр., Фримен Эл., Сьерра К., Бейтс Б. "Паттерны проектирования" (2011) - Очень хороша для начинающих. Я бы рекомендовал начать с неё.
Ответ написан
Комментировать
@chaetal
разработчик ПО и преподаватель
Навскидку примерный Правильный путь ООП-падавана:

1. Изучить Smalltalk — только здесь правильное (простое и полноценное) объектное программирование. Сначала можно посмотреть статьи на smalltalk.ru для формирования общего представления о философии Smalltalk-а (это ключевой момент), погуглить статьи на тему Why Smalltalk… Но основное — это практика, за ней идти на pharo.org. За помощью можно обращаться к Russian Smalltalk User Group: https://groups.google.com/forum/#!forum/sugr

2. Когда немного освоитесь, можно почитать Бековские Smalltalk Best Practice Patterns [http://stephane.ducasse.free.fr/FreeBooks/BestSmal... — важные и неочевидные нюансы программирования на Smalltalk.

3. С этой книги (даже с введения к ней) можно плавно переходить к изучению TDD — сначала классику по Test-Driven Development by Example того же Бека, затем — через Growing Object-Oriented Software Guided by Tests к всепоглощающему TDD (BDD). Обе книги можно найти в виде PDF за бесплатно.

Где-то в промежутке после начала первого и окончания третьего пункта должно наступить просветление. Путь не быстрый.

Предупреждение: после наступления просветвления большинство "объеткно-ориентированных" языков и книг по этой теме будет вызывать рвотный рефлекс.
Ответ написан
@Jaropolk
Как ты правильно заметил, программы и её блоки имеют между собой зависимости. Хороший код минимизирует зависимости между блоками, а связи делает понятными и очевидными.
Для того, чтобы писать такой код, прежде всего нужен опыт.
Поэтому программирование на ООП это не просто набор знаний - это искусство. А в этом деле нужен опыт и чутье (хотя это тот же опыт).
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы