Pull to refresh
26
0
Михаил @Flammar

Java (+Javascript) fullstack developer

Send message
Полезная парадигма: позволяет удобно упаковывать код. Особенно при проектировании методом рефакторинга.
Если большая часть вашего кода по факту написана в процедурном стиле (данные, методы, объекты пораждаются в основном для выполнения каких то действией), а ООП-шные фишечки (хотя бы те же наследование, полиморфизм и т.д.) используются относительно редко, то мне непонятно, почему в общем и целом это называется ООП
По факту это модульное программирование. От ООП отличается только отсутствием неявного аргумента this</e>;-).
полное копирование списка
А не проксирование?
Сам по себе ОО язык не заставит человека проектировать в терминах объектов :)
С десятого раза заставит. В том и прелесть.
Наверное, надо его хвалить за то, что он эмерджентен, разнообразен и удивителен;-)
В той статье, кстати, инкапсуляция, абстракция, полиморфизм и наследование названы не «принципами», а всего лишь «важнейшими механизмами» ООП.
С иммутаблями через фабрику — можно и при фиксированности классовой принадлежности.
Несовместимо с тем, что классовая принадлежность объекта и иерархия классов фиксированы (как в самых популярных языках).
Другое дело, если объект представляет из себя список или хранилище «ключ-значение» без ожидаемого набора ключей и элементов — удаление одного из них ни для кого не окажется сюрпризом, опять же независимо от парадигмы.
Напоминает перенос ошибок со стадии компиляции на стадию выполнения…
БОльшая часть дискуссии была вызвана смежной темой удаления геттера с сеттером.
А со строгим отделением модели от контроллера в MVC-паттерне ассоциаций не возникает?
и при этом паттерны традиционно считаются сильной стороной ООП.
Попытаюсь найти точку зрения, с которой это так.

Раз паттерны — неизбежное зло, будем использовать. И тут — да, в ОО языках и сами эти костыли красивее и пользы от них больше, чем в не-ОО языках. «Think Haskell, code C++», образно говоря, лучше, чем «Think С, code very bad assembler».
Посмотрел Grails. С точки зрения «джависта» — «полный угар»: методы, котрые являются методами экземпляра у CriteriaBuilder и EntityManager, перобразованы в статические методы у сущностей. Как будто все сущности наследуют от одного предка. Ну еще и прикопипастнуты методы (или пригенерированы по шаблону), вызывающие методы предка с доп.аргументом — классом:
public class Person extends DBExternalizableBase{
...
  public static Person get(int id){
    return DBExternalizableBase.<Person>get(Person.class, id);
  }
...
}

Вкурил дальше — так и есть, делается через препроцессор. От препроцессора в самой Java отказались сразу. Посмотрел дальше — никакой переносимости кода между библиотеками или между контейнерами даже и не подразумевается, что для программирования на самой Java моветон вдвойне.
Согласен. Если для некоего частого поведения требуется паттерн, значит, в языке не хватает идиом или библиотечных функций/макросов. Паттерны — это костыли для хоть какого-то лечения этой нехватки.
Кем считаются? Не мной точно. Паттерны — это по определению «костыли», раз можно не только «так», а ещё и «не так», раз можно, например, не только «собирать мусор», а ещё и «не собирать мусор». Лучший паттерн — это элемент синтаксиса языка, как оператор вызова функции или оператор цикла или интерфейс в Java. Второй — это системная библиотека, подпрограмма или макрос, которые вынуждают его использовать, типа ситуации с ActionListener-ами в Java. Третий — несистемная библиотека, подпрограмма или макрос, которые вынуждают его использовать.
Java и С++ по сравнению с Javascript, LISP и Haskell — да.

Уточню свой ответ — это сейчас в основном реализация черт функциональных языков в языках, в которых функция не является «объектом первого класса».

недавно нашёл — norvig.com/design-patterns/ или www.google.com/search?q=peter+norvig+design+patterns+in+dynamic+languages
Реализация высокоуровневых черт в низкоуровневыз языках. В 1950-е годы, ещё до изобретения стека и немного после него, на ассемблере некоторых машин вызов подпрограммы тоже был «шаблоном дизайна».
Если кратко, имелось в виду проксирование свойств, точнее, геттеров и сеттеров.

Information

Rating
Does not participate
Location
Санкт-Петербург, Санкт-Петербург и область, Россия
Date of birth
Registered
Activity