LINUX.ORG.RU
ФорумTalks

Посоветуйте книжку по объектно-ориентированному программированию

 


4

3

Доброго времени суток

Сабж. До сих пор пишу скрипты в рамках процедурной парадигмы. Тупо не умею выделить объекты и проработать их взаимодействие. Хотя в институте курс по C++ был. А усложнение скриптов приводит к нагромождению быдлокода.

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

update

Как вариант, подойдёт совет «ООП уже не нужно, изучай $paradigm». Если под эту парадигму есть хорошая книга, а также актуальный И популярный язык программирования. lisp и брейнфак не предлагать :D

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

★★★★★

Последнее исправление: router (всего исправлений: 1)

пишу скрипты в рамках процедурной парадигмы

На каком языке? Уточни. Скрипты на Python и PHP предполагают возможность придерживаться ООП-прадигмы из коробки, а Bash-лапша — нет.

EXL ★★★★★
()
Ответ на: комментарий от EXL

В данном случае это не важно. Мне нужно именно научиться применять ООП на практике

Чисто для поддержания разговора - perl и python.

router ★★★★★
() автор топика
Ответ на: комментарий от Valeg

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

router ★★★★★
() автор топика
Ответ на: комментарий от ados

Уж лучше какой-нибудь GUI-программы, на Java, там должно быть ООП во все поля, а читать движки игр для знакомства с ООП это несколько наркоманское занятие.

EXL ★★★★★
()
Ответ на: комментарий от router

Чтобы изучить прадигму программирования, нужна практика. На теории ты далеко не уедешь. А для практики нужно изучить какой-либо язык, в котором эта ООП-прадигма доминирует и сделать какой-нибудь полезный для себя проект. Любая книжка по Java с первых глав вдолбит в тебя что такое объекты/классы/наследование/полиморфизм/инкапсуляция/интерфейсы/абстрактные классы и т. д.

EXL ★★★★★
()

Г. Буч «Объектно‑ориентированный анализ и проектирование с примерами приложений на C++»

И другие книги на тему «объектно‑ориентированный анализ и дизайн».

Northsoft ★★
()
Ответ на: комментарий от EXL

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

Ты не поверишь. Я регулярно пишу скрипты. Регулярно пытаюсь использовать классы. Но постоянно какой-то дикий перекос, либо класс делает слишком много, либо слишком мало.

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

Курс по C++ в институте. Твой метод не работает :D

Мне нужна теория. С разбором типовых ошибок

Любая книжка по Java с первых глав вдолбит в тебя что такое объекты/классы/наследование/полиморфизм/инкапсуляция/интерфейсы/абстрактные классы и т. д.

Именно поэтому ты посоветовал даже не книгу, а вымерший язык.

Ты разговариваешь с собственной фантазией ;) Ну ок, не буду тебе мешать беседовать с умными людьми

router ★★★★★
() автор топика
Ответ на: комментарий от ados

Да, читал. А что?

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

Stil ★★★★★
()
Ответ на: комментарий от tailgunner

Meyer «Object-oriented software construction»

Спасибо

Но вообще, тебе не нужно ООП. Почитай что-нибудь о проектировании программ.

Опять же, лучше бы название книги

router ★★★★★
() автор топика
Ответ на: комментарий от router

Я учился слишком давно и тупо не знаю современных учебников. Но в интернетах выложено достаточно курсов солидных универов по SE - думаю, тебе подойдет любой учебник, который там рекомендуется.

А вообще, SICP и GoF. Наверное, тебе даже GoF нужнее - там готовые рецепты.

tailgunner ★★★★★
()
Ответ на: комментарий от ados

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

Касательно того, что ты скинул, там перемешивается как структурный подход, так и ООП: extra.py vs alien_invasion.py

EXL ★★★★★
()
Ответ на: комментарий от EXL

Касательно того, что ты скинул, там перемешивается как структурный подход, так и ООП

Ты хотел чтобы я посоветовал ТСу SICP с лиспом учить?

ados ★★★★★
()
Ответ на: комментарий от router

Вот кстати нашел хороший ответ на почти твой вопрос: https://www.quora.com/What-are-the-must-read-books-for-software-engineers/ans...

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

tailgunner ★★★★★
()
Ответ на: комментарий от router

посоветовал даже не книгу, а вымерший язык.

https://github.com/blog/2047-language-trends-on-github

Ясно.

Мне нужна теория. С разбором типовых ошибок.

Именно поэтому ты посоветовал даже не книгу

Я хотел тебе посоветовать «банду четырёх», но зачем, ты же умный парень, знаешь какие языки сейчас мёртвые, а какие живые. Следовательно сам найдёшь себе нужную книжку с серебряной пулей для своих скриптов.

EXL ★★★★★
()

ООП ненужно, учи процедурно-ориентированное программирование. Язык - Си

XShell
()

+1 Гради Буч для усвоения азов.

+1 SOLID, IoC, MVC и другие принципы/паттерны. Можно просто пройтись по соотвестсвующим статьям на Википедии/блогам на эти темы, чтобы охватить понятия и общие принципы.

Gang of Four обходи стороной. Есть более приятные источники по паттернам, та же Википедия и блоги.

В остальном заучивание теории не поможет, только практика. Пиши класс; замечаешь перекос - исправляй; повторяй, пока перекос не перестанет мешать. Иначе рискуешь закопаться в паттернах и абстракциях в ущерб читабельности и производительности, в первую очередь своей собственной.

E ★★★
()

BTW не помешает потыкать юнит-тестирование, поможет проектировать вменяемые интерфейсы и более гибкое взаимодействие объектов. Книжки Кента Бека хватит для того, чтобы начать.

И «Совершенный код», если ещё не читал, это маст рид.

E ★★★
()
Ответ на: комментарий от EXL

Да, извини. В ветке обсуждения перепутал тебя с Valeg

router ★★★★★
() автор топика
Ответ на: комментарий от router

Но постоянно какой-то дикий перекос

Пиши код. Умение писать правильный код приходит только с опытом

либо класс делает слишком много, либо слишком мало.

Single responsibility principle

Курс по C++ в институте

Самый хужий язык для обучения

Мне нужна теория. С разбором типовых ошибок

>>>здесь<<<

вымерший язык

Не вымерший, а устаревший. Попробуй Kotlin

I60R ★★
()

Часто достойные книги ссылаются на Буча. ЕМНИП, среди них и GoF, и McConnell. Наверное, стоит начать с него. Лично у меня Буч шёл очень тяжело. Вроде бы достаточно очевидные принципы, но нудная подача.Тем не менее, уже классика.

JaneDoe
()
Ответ на: комментарий от EXL

Для ООП не обязательно наличие классов. Линуксовое ядро ООП, но написано на C - недавно где-то обсасывали этот момент.

SaBo ★★
()
Последнее исправление: SaBo (всего исправлений: 1)
Ответ на: комментарий от tailgunner

Meyer «Object-oriented software construction»

Удваиваю. В качестве ЯП используется Eiffel.

Wizard_ ★★★★★
()

Возьми книжку по паттернам проектирования GoF, адаптированную для твоего языка. В них вся суть прикладного применения ООП. Сам GoF читать не стоит, т.к. книжка морально устарела, нужны именно современные адаптации.

Плюс нужно прочитать на Википедии и начать использовать принципы SOLID: https://ru.wikipedia.org/wiki/SOLID_(объектно-ориентированное_программирование)

stevejobs ★★★★☆
()
Последнее исправление: stevejobs (всего исправлений: 1)
Ответ на: комментарий от Inshallah

Смотря что за скрипты. Бывает программа реализована в виде библиотеки, а роль интерфейса выполняют скрипты на каком-нибудь питоне.

DNA_Seq ★★☆☆☆
()

Хотя в институте курс по C++ был.

С++ не является ОО-языком, классы там реализованы как структура со встроенными функциями, больше ничего от ООП там нет. Даже в перле возможности богаче, хоть никакой синтаксической поддержки ООП там не предусмотрено и все ООП делается ручками как в С.

DNA_Seq ★★☆☆☆
()
Последнее исправление: DNA_Seq (всего исправлений: 1)
Ответ на: комментарий от router

постоянно какой-то дикий перекос, либо класс делает слишком много, либо слишком мало.

Если класс делает много, и начинает пересекаться с другими классами - берёшь и выносишь пересекающееся в интерфейс, например (потому что в Java, например, можно наследоваться только от 1 абстрактного класса, но зато можно имплементировать сколько угодно интерфейсов; а также начиная с Java 8 интерфейс может содержать реализацию).

ekzotech ★★★★
()

Паттерны проектирования

bender ★★★★★
()

Г. Буч «Объектно‑ориентированный анализ и проектирование с примерами приложений на C++»

Плюсую, наверное лучшая книга по ООП, особенно иллюстрации очень помогают пониманию.

foror ★★★★★
()
Последнее исправление: foror (всего исправлений: 1)

В английский умеешь? Тогда Elegant Objects от Егора Бугаенко + его блог yegor256.com. Не позволяй сбить себя с пути истинного ООП, читай сразу Егора!

Deleted
()
Ответ на: комментарий от stevejobs

| Возьми книжку по паттернам проектирования GoF, адаптированную для твоего языка.

Что можешь посоветовать для ждависта кстати?

ertgblasd ★★
()
Ответ на: комментарий от ertgblasd

Я читал в последний раз перед собеседованием «Стелтинг С., Маассен О. - Применение шаблонов Java». Есть на рутрекере. Очень древняя книжка (2002 год), авторства Sun Microsystems, но весьма качественная. Жаба с тех пор никуда не ушла, книжка всё еще актуальна.

А вот является ли она лучшей в своём роде - понятия не имею, т.к. других книжек специально не искал.

stevejobs ★★★★☆
()
Ответ на: комментарий от Deleted

Ему надо сделать какой-то такой спецсимвол, например маленькую картинку с белкой-истеричкой, чтобы отмечать места, когда здравые в принципе мысли стремительно скатываются в фанатизм :3

stevejobs ★★★★☆
()

Майкл Физерс. «Эффективная работа с унаследованным кодом»

iZEN ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.