Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Инкапсуляция, в частности, делает возможным проксирование.
C# 1’s type system is static, explicit, and safe.
public class Person extends DBExternalizableBase{
...
public static Person get(int id){
return DBExternalizableBase.<Person>get(Person.class, id);
}
...
}Лучший паттерн — это элемент синтаксиса языка, как оператор вызова функции или оператор цикла или интерфейс в Java.
и при этом паттерны традиционно считаются сильной стороной ООП.Попытаюсь найти точку зрения, с которой это так.
В частности, предпочтительным способом реализации сущности «социальный аккаунт» для программы, работающей с разными социальными сетями, является не создание абстрактного класса SocialAccount с потомками FBAccount, VKAccount и TwitterAccount, а создание нормального domain class’а SocialAccount и фабрик-конвертеров в него из данных от разных социальных сетей, может быть даже JSON-to-SocialAccount-конвертеров.
В пользу FBAccount и VKAccount гоорит в основном то, что в экземпляре можно хранить сырой REST-ответ и не запрашивать сервер лишний раз.
Persistence ignorance (видимо, это .NET-специфичный термин, в Java я его не встречал) — это хорошая и правильная вещь.
Погуглил. В википедии его нет, в интеренте встречается только в текстах про .NET и связанных с ним платформах. Похоже, что это — специально изобретённый Микрософтом велосипед. Брендинг и нейминг — тоже важные вещи.Persistence ignorance (видимо, это .NET-специфичный термин, в Java я его не встречал) — это хорошая и правильная вещь.Вообще-то, это термин из архитектуры.
Я, наверное, знаю ООП
С появлением «методов» всплыл ещё один приятный момент в части организации функционала: вместо создания 900 функций с перекрёстно дублирующимися первыми и вторыми половинами названий (помните WordBasic?) можно сделать 30 классов с 30 методами в каждом.
Также, в стало возможным сделать языки со строгой типизацией, что дало возможность перенести время обнаружения многих ошибок с фазы выполнения программы на на фазу её компиляции.
Прежде чем говорить что это говно, научитесь его использовать и научитесь мыслить объектно. Научитесь проектировать и программировать используя ООП.
Люди будут еще очень долго кричать что ООП зло. Но чаще всего, это связанно с тем, что они не понимают его и пытаются всему миру доказать, что это не у них не получается, это ООП такое стремное.
А фразы типа «вы сначала научитесь, а потом тут рассказывайте» вообще лишены смысла.Да конечно вы правы. Давайте рассказывать и писать обо все чего не знаешь. Будет супер! То, что для вас это лишено смысла, еще раз говорит о том, что вы любитель потрепать на неведомые вам темы.
Я знаю, ООП скоро объявят религией, а любое инакомыслие будет жестоко наказаваться инквизицией. Программисты на Haskell/Erlang/Lisp/Clojure/etc будут гореть в аду за прегрешения и нежелание познавать «О великую истину ООП». Детский сад, ей богу.Никогда ничего не сказал плохого про другие подходы, которые не ООП. Всегда говорю лишь, что ООП — это универсальный и очень мощный инструмент. Детский сад прет из вас, т.к. вы видите в моих словах придуманное вами.
Как по мне, то основная причина столь долгих споров заключается в следующем: в комментариях ко всем статьям приводятся указания на различные нестыковки, несогласованности, «непонятностях» в парадигме.Повторюсь. У автора статьи, нестыковки происходят из-за того, что он не умеет использовать инструмент. Конкретно это видно, когда человек забыл про принцип единственной обязанности. И это еще раз подтверждает мои слова:
Но чаще всего, это связанно с тем, что они не понимают его и пытаются всему миру доказать, что это не у них не получается, это ООП такое стремное.
Если вы считаете, что исчерпывающий ответ на эти комментарии — «человек забыл про принцип единственной обязанности», то пусть так и будет.Не надо все под одну гребенку. Везде свои проблемы и ответы.
Давайте не переходить на личности, это грубо и некрасиво.Я этого не понимаю. Я не говорю, что автор злой и некрасивый. Я говорю, что автор не понимает чего пишет и конкретно указываю что не понимает! И говорю, что вы тоже, раз поддерживаете автора и считает статью дельной. Или теперь нельзя говорить что именно вы неправы??? Вы может быть очень добрый и хороший человек, и другого я не смею думать.
Я этого не понимаю.
И говорю, что вы тоже, раз поддерживаете автора и считает статью дельной.
Или теперь нельзя говорить что именно вы неправы
вы любитель потрепать на неведомые вам темы
автор не понимает чего пишет, вы тоже не понимаете
автор «плавает» и вы тоже, раз этого не видите
Прочитал до менеджеров, которые помогут сделать грязное дело. Понял что человек не понимает что такое принцип единственной обязанности (или как его еще часто называют принцип единственной ответственности).Или это не аргумент?
Это просто персонолизированные оценочные высказывания (ничем не подтвержденные), к тому же высказанные слишком уж надменным тоном.Это выводы.
И говорю, что вы тоже, раз поддерживаете автора и считает статью дельной.
Неправда. Читайте, пожалуйста, внимательно habrahabr.ru/post/149096/#comment_5039788
вы тоже «плаваете», раз считаете статью дельной.
автор не знает что такое принцип единственной обязанности и поэтому не понимает зачем создавать другие абстракции (его пример с менеджерами отличное подтверждение моих слов)
Есть печь (абстрактная печь). У нее есть поведение — включить, выключить, увеличить или уменьшить температуру, положить чего-то, достать чего-то и состояние — температура в печи, включена или выключена. Это отличный пример абстрактного объекта в котором соблюдены принципы инкапсуляции (при реализации я их обязательно буду соблюдать).
научитесь его использовать и научитесь мыслить объектно
если ООП настолько всеобъемлюще, что покрывает собой и другие парадигмы, то в чём вообще отличие ООП от программирования в принципеОчень толсто. Только вам это могло прийти в голову после моих слов.
Если в рамках проектирования используя ООП подход, я не использовал основные инструменты (наследование, полиморфизм)
Я ещё раз спрашиваю: в чём тогда состоит этот «ООП подход»? Чем он отличается от модульного программирования?о.О
Вы еще спросили что же такое ОО подход при проектировании. Это в первую очередь объектное мышление. Вы выделяете объекты и требуемый уровень абстракции этих объектов для решения вашей задачи. А также продумываете то, как объекты будут взаимодействовать.
Вы еще спросили что же такое ОО подход при проектировании. Это в первую очередь объектное мышление. Вы выделяете объекты и требуемый уровень абстракции этих объектов для решения вашей задачи. А также продумываете то, как объекты будут взаимодействовать.
В этот момент неплохо было бы понимать что такое SOLID и не забывать про инструменты ООП.
Я делаю всё то же самое при проектировании с любым подходом — функциональным, структурным, модульным, да хоть чисто математическим.Ну так вы и используете объектный подход. Вы используете объектное мышление. То, что вы используете объектное мышление при проектировании системы, которая будет реализовываться в функциональном языке (как пример), говорит лишь о том, что вы не верно мыслите, вам надо мыслить другими вещами (например потоки данных, полностью забыв про состояние и понятие объекта, т.к. их там нет :P). Это еще раз лишь подчеркивает то, что вы используете объектный подход там, где надо использовать другие принципы мышления. И это еще раз говорит о том, что объектный подход при проектировании очень удобен.
То, что вы используете объектное мышление при проектировании системы, которая будет реализовываться в функциональном языке (как пример), говорит лишь о том, что вы не верно мыслите, вам надо мыслить другими вещами (например потоки данных, полностью забыв про состояние и понятие объекта, т.к. их там нет :P)
На уровне языка — это возможность использования наследования, полиморфизма. На уровне проектирования — использования объектного подхода, плюс возможность использования именно на уровне проектирования наследования и полиморфизма.
Понял что человек не понимает что такое принцип единственной обязанности (или как его еще часто называют принцип единственной ответственности).У вас создалось впечатление, что в менеджере счетов предлагается совместить функциональность по переводу денег и по персистингу данных в БД?
Ну а сервис разве не еще одна вариация на тему менеджеров?Да, ещё одна. В современном стандартном дизайне web-приложений с ORM менеджеров аж три слоя: DAO, сервис и контроллер. С какой-то долей обобщения можно сказать, что вся ответственность — в контроллере, хотя он в основном только дёргает сервисы.
Современные domain classes, кроме того, на деле почти всегда являются «прослойкой» к записям в таблицах баз дынных и проектируются изначально в СУБД или в средстве проектирования СУБД.
Проектировать нужно модель сущностей. А куда они там лягут — в классы, в БД или в сообщения — другой вопрос.
Сущности, как Вы написали, определяют при построении концептуальной модели БД.
Анализируем прикладную область, строим различные модели, в финале строим модель классов
Думаю, что концентрация на модели классов очень важна, так как это и есть «ядро» системы
Нет. Сущности выделяют при анализе бизнес-процесса.
Вы почему-то считаете, что объектная модель — это обязательный результат проектирования прикладного решения. Вам не приходит в голову, что бывают иначе декомпонуемые системы?
Ядро системы очень часто не имеет ничего общего с прикладной областью.
И иногда эти два аспекта могут быть реализованы даже в разных парадигмах.
Вы о какой методике анализа бизнес-процессов говорите?
Я ранее писал, что рассуждаю в рамках дискуссии посвященной ООП-дизайну, соответсвенно говорю про декомпозицию методом определения объектов прикладной области.
Пожалуйста объясните фразу «результат проектирования прикладного решения».
Я имею ввиду фокусирование инженера-программиста на построении модели классов, для него это «ядро» проекта.
Простите, Вы здесь о чем?
Понимаете ли, весь смысл дискуссии в том, повсеместно ли применим ООП-дизайн. Ну и да, не надо путать «определение объектов прикладной области» и построение модели классов, это совсем не одно и то же.
Как я уже говорил, я не понимаю, почему для произвольной прикладной задачи ядром проекта будет модель классов.
Пожалуйста объясните фразу «результат проектирования прикладного решения».
А какая часть вам в ней не понятна?
Я бы еще раз попросил бы вернуться в тему «ООП», хотелось обсуждать «Как нам это правильно сдеать в ООП», а не то, нужно ли ООП или нет, в определенных случаях.
чаще всего наибольшие трудности возникают при построении модели прикладной области, то, что автор статьи называет «домейнщиной».
Эта проблем решается выделением специальной сущности — «менеджера». В результате у объекта типа «банковский счёт» не остаётся метода перевести_на(счёт, сумма), а вместо этого у объекта типа «менеджер счетов» появляется метод перевести_с_на(с_счёт, на_счёт, сумма).
Я, наверное, знаю ООП. Опыт объектно-ориентированного программирования и дизайна. Ответ «не знающим ООП.»