Kirill Profile picture
19 Jan, 13 tweets, 3 min read
Сегодня последний тред из мифов в ООП #oopmyths Поговорим о том, что обычно считают ООП кодом и что влияет на его структуру больше всего. Какие вещи в ООП универсальны сквозь большинство языков. Включайтесь)
Ну и традиционно вопрос. Может ли код быть одновременно объектно-ориентирован и функционален?
Несмотря на любую теорию, на практике, многие программисты если не видят в коде конструкций вида something.do(data), то они не считают код объектно ориентированным. Проверял это много раз. Все это сопровождается философией в стиле "это поведение", а иначе нет.
То есть код в стиле do(something, data) уже не поведение. Тут мне добавить особо нечего, это всего лишь варианты синтаксиса и привычка. Есть языки типа Nim, в котором используется Unified Function Call. Любую функцию можно вызывать аж тремя способами включая способ через точку
Но не каждый вызов функции равен вызову через точку. Нужно учитывать наличие динамической диспетчеризации (иногда говорят отправка сообщений). Если она есть при вызове функции, то мы получаем практически полный эквивалент. Хороший пример это полиморфизм в Elixir.
В итоге вариант вызова на код влияет не очень сильно, но вот что влияет по настоящему сильно, так это объединение функций и данных вместе. Про это не часто говорят в рунете (на английском много статей), но именно такое объединение накладывает определенный стиль и ограничения.
Если внимательно посмотреть на best practice, то можно заметить как много внимания уделяется компоновке классов и их связям между собой. Причем как горизонтально (использование друг друга) так и вертикально (наследование). Тот же SRP. Принцип возникший из ограничений классов
В итоге можно получить такую цепочку. Связали все вместе, получили свой набор ограничений, получили динамическую диспетчеризацию (метод выбирается в рантайме) и, в конечном итоге, получили свой очень узнаваемый стиль и целую индустрию вокруг с книгами, паттернами и языками
Наличие интерфейсов, абстрактных классов, сокрытия данных, наследования и многие другие атрибуты встречающиеся в разных языках не меняют код настолько кардинально, насколько это делает объединение. А многое вытекает из этого объединения, включая ту же абстракцию.
Создатель Erlang Joe Armstrong писал в своей статье cs.otago.ac.nz/staffpriv/ok/J…

> Data structure and functions should not be bound together

> Objects have private state.

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

• • •

Missing some Tweet in this thread? You can try to force a refresh
 

Keep Current with Kirill

Kirill Profile picture

Stay in touch and get notified when new unrolls are available from this author!

Read all threads

This Thread may be Removed Anytime!

PDF

Twitter may remove this content at anytime! Save it as PDF for later use!

Try unrolling a thread yourself!

how to unroll video
  1. Follow @ThreadReaderApp to mention us!

  2. From a Twitter thread mention us with a keyword "unroll"
@threadreaderapp unroll

Practice here first or read more on our help page!

More from @mokevnin

23 Dec 20
В серии "мифы ооп" уже два треда:




Начинаем третий про наследование и отношения. Во второй части был опрос про отношения, на который правильно ответило только 29 процентов! И кажется что не все поняли первый тред. #oopmyths
Начнем как обычно с опроса. Вопрос: "Объяснять ООП надо через аналогию с реальным миром". Именно так делается в подавляющем большинстве источников и сервисах типа стековерфлоу.
Строго говоря, отношение частное-общее про типы, а не классы. В статье про сабтайпинг об этом написано внизу: en.wikipedia.org/wiki/Subtyping. И принцип лисков тоже не про классы. Наследование классов это всего лишь способ убрать дублирование кода. Один из худших способов.
Read 15 tweets
18 Dec 20
Итак) Второй тред посвященный ООП и мифам вокруг него. По итогам первого треда уточню, что разбор ООП идет не с точки зрения систем типов, а с точки зрения организации кода и влиянии на архитектуру. Лайк, шер, будет много интересного, поехали!

Отношение общее-частное это:
В первом треде мы разобрали что под полиморфизмом в ооп понимают полиморфизм подтипов. Остальные виды полиморфизмов тоже важны, но они не играют определяющую роль с точки зрения парадигмы. Полиморфизм подтипов, если по простому, сводится к разным реализациям нужного поведения.
Под типами и подтипами часто понимаются интерфейсы (и их аналоги типа протоколов) и отношения между интерфейсами. Иногда говорят "наследование интерфейсов". Соответственно классы и наследование классов тут не причем. И принципов Лисков не имеет отношения к классам.
Read 23 tweets
16 Dec 20
Сегодня я хочу попробовать формат коллективных твиттеров у себя в твиттере. Потвичу пару часов о мифах вокруг ООП. Лайк, шер приветствуется. Задание на самопроверку:

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

Нужно ли наследование для реализации полиморфизма подтипов?
Может ли язык называться ООП если в нем нет классов?
Read 34 tweets
9 Aug 18
Поиграем в игру. 1 лайк - 1 факт из жизни президентского полка. Я служил с 2004 по 2006 год в первой роте, той что стоит на МНС в Александровском Саду (сейчас немного другая структура).
Писать начну вечером. Структура такая:

1. Что такое ПП и какие задачи выполняет.
2. Как туда попадают.
3. Жизнь в полку.
Президентский полк - особое подразделение, которое не подчиняется министерству обороны, а является подразделением ФСО. Полное наименование: Президентский полк Службы коменданта Московского Кремля Федеральной службы охраны Российской Федерации
Read 53 tweets

Did Thread Reader help you today?

Support us! We are indie developers!


This site is made by just two indie developers on a laptop doing marketing, support and development! Read more about the story.

Become a Premium Member ($3/month or $30/year) and get exclusive features!

Become Premium

Too expensive? Make a small donation by buying us coffee ($5) or help with server cost ($10)

Donate via Paypal Become our Patreon

Thank you for your support!

Follow Us on Twitter!