LINUX.ORG.RU

Что почитать по ООП?

 , , , ,


4

4

1. Есть несколько книг на выбор. Нужно определить какую книгу стоит прочитать первой, а какие позже. Главные критерии для упорядочивания: «фундаментальность» касательно ООП, практичность и доступность (грамотность) в изложении материала.

Вот список:

  1. Философия Java // Б.Эккель
  2. ЯП C++ // Б.Страуструп
  3. ООП с ANSI-C // А.Шрайнер
  4. Типы в ЯП // Б.Пирс

2. Посоветуйте лучший, по вашему мнению, учебный материал по паттернам проектирования (статьи, книги, видео, что угодно).

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

Питон забыл кстати, я думаю больше пользы было бы.

anonymous ()

По паттернам:
Head First. Паттерны проектирования Бейтс Берт, Робсон Элизабет, Сьерра Кэти, и Фримен Эрик - Шикарная книга, изложение понятное, все лаконично и понятно.
Приёмы объектно-ориентированного проектирования. Паттерны проектирования Эрих Гамма, Ричард Хелм, Ральф Джонсон, Джон Влиссидес - Классика, но изложение хуже чем в первой.

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

GOF

Так себе совет. Нельзя понять потерны не понимая проблем, только практика а потом листать GOF, больше просто так, уж точно не пытаться натянуть первый попавшийся паттерн на текущую задачу.

Aber ★★ ()

во многих языках эти паттерны уже часть синтаксиса (итераторы, прототипы, прокси, обозреватели и т.п.), а фабрики вообще не нужны, потому как сам класс может передаваться как аргумент. это тащем-то пустая трата времени можешь еще с пузырьковой сортировкой поиграться, с графами, нейронными сетями и прочим шлаком, а в итоге устроишься на работу и будешь писать компоненты на ангуляре/вуе с парой полей для ввода и кнопкой… да и все. но этим знаниям обязательно найдется применение: один раз в жизни тебя попросят на собеседовании реализовать сортировку пузырьком (на одном из десятков). ради этого ты учился на погроммиста и читал вумные книги.

tz4678 ()

Если хочешь научиться ООП, открывай редактор, и пиши программы. Если ты совсем ничего не знаешь об ООП, то вбиваешь в поисковик что-то вроде «основы ООП <язык программирования>» и просматриваешь первые 3-5 ссылок. Что-то не получается, или чувствуешь что нужно по-другому - тратишь некоторое время на эксперименты, если продвижения нет - спрашиваешь у знакомого или создаешь тему на форуме.

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

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

это тащем-то пустая трата времени можешь еще с пузырьковой сортировкой поиграться, с графами, нейронными сетями и прочим шлаком, а в итоге устроишься на работу и будешь писать компоненты на ангуляре/вуе с парой полей для ввода и кнопкой

Не стоит всех судить по себе.

hobbit ★★★★★ ()

1 — не читал, но осуждаю. Java и нормальное ООП — вещи параллельные, там даже перегрузки операторов нет, вместо лаконичной магии получаются километровые чейны методов со страшенными длиннющими названиями. А вместо классов скорее компоненты, которые можно юзать как классы, фу так жить. Вроде бы всё нужное для ООП есть, но оно хромает на обе ноги.

Да, да, утрирую, но не сильно.

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

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

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

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

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

А, нет, на трёх. На третьем мне дали тестовое задание на джанге (оцени иронию) и я в итоге слился. Ладно ещё сама джанга, но от REST framework я был в ярости.

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

Формошлёпство, сплошная копипаста, обезьянья работа.

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

Из принципа допилил это говнище, почти два дня в общей сложности потратил (джангу не знаю, а задание хоть и интересное было, но неразумно объёмное. согласился не подумав), потом думал, надо оно мне или нет, отправлять результат не стал, отписал что нафиг-нафиг.

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

Но всё вообще наоборот. Ты просто не разобрался. Оно довольно объемное и вот прям сходу въехать может быть не очень просто, меня по началу оно тоже напугало.

Ты можешь сделать ViewSet и у тебя будут вьюшки get(list)/get_id/post/delete/put/etc сразу к модели. К ним наавтогеренится документация. Фильтры всякие добавляются одной строчкой или управление правами. Сериализаторы можно автоматически делать из модели(modelserializer). При этом всё это разбито кастумизируется легко, разбито на небольшие методы которые легко переопределяются по вкусу, разбито на mixin`ы т.е. можно собрать свой viewset тот же из кусков. Валидация какая хочешь. Короче это максимальный RAD для апи таких и очень неплохо продуманный и спроектированный. Конечно если у тебя какой-то микросервис с одним методом это оверкилл и на микрофреймворке это проще руками всё делать, но для больших проектов это классная штука.

pawnhearts ★★★★ ()

спасибо, конечно, за ценные советы о том как мне научиться ООП и ваше мнение о его (и паттернах) пользе, но у меня были ДВА вполне конкретных вопроса и они не об этом.

Edward_I ()

1. Если рассматривать приведённый список, то единственным фундаментальным, доступным и грамотным является TAPL aka Типы в Языках Программирования. Правда, есть побочный эффект - по прочтении начинаешь понимать, что к чему, забиваешь на ООП и хочешь писать код на CoC.

Касательно остального: варианты 1 и 2 - учебники по языкам, в которые заложены некоторые принципы, вариант 3 - реализация некоторых принципов на ANSI C. При этом авторы называют эти некоторые принципы «ООП». Что считать каноническим ООП - вопрос сложный.

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

ну для модели это что-то типа в простейшем случае

class AccountSerializer(serializers.ModelSerializer):
    class Meta:
        model = Account
        fields = '__all__'

при этом можно указать конкретные поля, или исключить какие-то можно их переопределить, можно сделать кастомные вычислимые поля и т.п. можно указать функции для валидации или какие-то встроенные валидаторы.

вообще это аналогично modelform из обычной джанги, только покруче.

а можно и не пользоваться сериализатором, твоя api может просто возвращать словарь или список.

в любом случае при использовании микрофреймворка аналог сериализаторов придется изобретать или брать что-то типа https://marshmallow.readthedocs.io/en/3.0/

pawnhearts ★★★★ ()

Есть несколько книг на выбор. Нужно определить какую книгу стоит прочитать первой, а какие позже. Главные критерии для упорядочивания: «фундаментальность» касательно ООП, практичность и доступность (грамотность) в изложении материала.
Вот список: ...


Bruce Eckel - Thinking in C++
Bruce Eckel - Thinking in Java

ну и потом все «новшества» языков подтянуть из других источников.

vinvlad ()

Попробую по-другому.

1. Если кто читал книги из списка, указанного в моем вопросе №1, прошу дать краткий отзыв о них.

2. Если вы знаете, что такое паттерны проектирования (а поскольку вы что-либо о них утверждаете, то должны знать), то расскажите о вашем источнике знания - откуда вы о них узнали. Думаю, у вас не было такого, что вы писали-писали и бах, прилетела идея - "о, а эту конструкцию мы назовем - фабрика! буду её применять и в других проектах". Наверное, вы где-то это слово сначала услышали-прочитали и осознали его содержание (даже если саму фабрику вам приходилось реализовывать раньше - как собственную noname-практику).

Edward_I ()
Ответ на: комментарий от WitcherGeralt

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

Только вот marshmallow к orm не привязан, так что с ним придется как раз все поля описывать ещё раз.

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

1. Если рассматривать приведённый список, то единственным фундаментальным, доступным и грамотным

а если выйти за пределы списка, что ещё (помимо TALP) можете порекомендовать исходя из заданных условий?

Edward_I ()
Ответ на: комментарий от rumgot

По паттернам:
Head First. Паттерны проектирования Бейтс Берт, Робсон Элизабет, Сьерра Кэти, и Фримен Эрик - Шикарная книга, изложение понятное, все лаконично и понятно.

перевод на русский нормальный? или только в оригинале читать?

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

2. Сам термин «шаблоны проектирования» в софте возник благодаря книге с одноимённым названием, в которой в процессе разработки текстового редактора авторы предлагают типичные решения типичных для тех времён проблем. Но основная ценность, на мой взгляд, не в самих шаблонах, а в попытке создания некоторого единого языка. По факту, у любой группы людей есть свой собственный порядок - какой-то вася, которого все знают, локальные мемы, понятия. GoF попытались сделать словарь, на котором разговаривали бы все разработичики, и отчасти им это удалось. Например, при обсуждении фабрики или итератора все примерно понимают, о чём речь. Однако, как ни крути, всё зависит от контекста - синглтон в двух разных компаниях может иметь два совершенно разных смысла. Основная идея - узнай, на каком языке говорит то сообщество, в которое ты хочешь попасть, и потом уже изучай его.

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

Говнокодер может получиться.

А с его подходом - теоретик.

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

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

1.1 Философия Java // Б.Эккель хороший букварь для начинающих программировать да и ещё и в Джаве.
1.2 ЯП C++ // Б.Страуструп тут скорее тогда его- же «Дизайн и эволюция c++» - но оно более академично шоли ибо автор называет себя платонистом.
1.3 ООП с ANSI-C // А.Шрайнер это реально промышленное использование инструмента под изменившиеся «поверхностные» тренды и смену речекряка.
1.4 Типы в ЯП // Б.Пирс сверх фундаментально-элементарно как тут уже указали.

2.

https://en.wikipedia.org/wiki/The_Elements_of_Programming_Style

ибо суть та же - как не вполне годными для модели инструментами адаптировать(бойлерплейтит) инструмент - что бы вот этим вот инструментом++ беспрепятственно изливать мозговой сок постановщика задачи в код.

anonymous ()
Ответ на: комментарий от Laz

про патерны проектирования ващет https://en.wikipedia.org/wiki/Portland_Pattern_Repository

банда четырёх - зажурно...лировали что-ли этот и несколько других успешных опытов.

зы. и да это теже люди что the WikiWikiWeb ( the Memeх - другое железо :) )

anonymous ()
Ответ на: комментарий от tz4678

Столько фреймворков развелось, что капец. Раньше джанга, фласк, черрипай, пирамид у полутора инвалидов и торнадо были, а сейчас на тесты новинок можно месяц потратить и всё равно что-то упустить. Всё никак не соберусь, список на тестирование у меня уже солидный.

WitcherGeralt ★★ ()

По первому вопросу:

Философия Java - это скорее про JVM и Java Language, хорошо для расширения кругозора при подготовке к сертификации

Рекомендую:

A) Егор Бугаенко. Элегантные объекты. Java Edition.

  • кратко
  • с практическими примерами
  • на живом русском языке (очень важно! читать Бутча в детстве было крайне тяжело что в переводе, что в оригинале)

Да и вообще посты и выступления Егора заслуживают внимания.

B) SICP + HTDP - если до сих пор не прочел

C) Отца-основателя ООП - Alan Kay (выстпуления, статьи и интервью с ним)

Спойлер: Отецъ не может дать простое определение, что же такое ООП

anonymous ()
Ответ на: комментарий от Kroz

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

Если не умеешь быстро осваивать новый материал

Так вот в том-то и дело - нужно уметь быстро не только 1-2 статьи усвоить, а 1-2 книги.

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

На собеседованиях ценят не только сонаправленность убеждений кандидата и работодателя, а еще уверенность в своем опыте и знаниях. Если ты сказал, «Нахер паттерны!» и затем действительно убедил, что без них можешь делать, то ок. Но если ты скажешь «Епт, конечно нужны, вот показываю...», то скорее всего тоже будет ок.

rumgot ★★★★★ ()