CoffeeScript принёс в JS неплохую абстракцию классов, основанную на прототипах.
Реализовав известную модель наследования и дополнив её наследованием методов касса,
он позволяет легко строить иерархии классов, даже не зная о цепочках прототипов.
Но и эта модель может быть улучшена.
Читать полностью »
Рубрика «наследование» - 4
Улучшенное наследование в CoffeeScript
2013-08-18 в 19:44, admin, рубрики: coffeescript, inheritance, javascript, node.js, ruby, наследование, метки: coffeescript, inheritance, javascript, node.js, ruby, наследованиеГрабли 2: Виртуальное наследование
2013-07-08 в 4:37, admin, рубрики: c++, inheritance, KISS, наследование, Программирование, Проектирование и рефакторинг, метки: inheritance, kiss, наследованиеСтатья о том, как множественное наследование все усложняет. Как виртуальное наследование, на первый взгляд, реализовано нелогично. Как на второй взгляд логика появляется, но уровень сложности и запутанности продолжает расти. В общем, чем сложнее задача, тем более простые нужно подбирать инструменты.
Все основано на реальных событиях, но примеры были максимально упрощены, чтобы в них осталась лишь суть проблемы.
Читать полностью »
Композиция vs наследование
2013-04-21 в 19:50, admin, рубрики: c++, агрегация, композиция, наследование, ооп, Программирование, Стратегия, метки: агрегация, композиция, наследование, ооп, Стратегия Как и всем разработчикам, мне часто приходилось читать и слышать утверждение, что «композиция всегда лучше наследования». Наверное, даже слишком часто. Однако я не склонен принимать что-либо на веру, поэтому давайте разберёмся, так ли это.
Читать полностью »
«Работает — не трогай». Стоит ли нарушать правила?
2012-12-27 в 20:31, admin, рубрики: gtd, legacy, изменения, интеграция, код, наследование, разработка, рефакторинг, тестирование, метки: legacy, изменения, интеграция, код, наследование, рефакторингВведение
Очень не хватало возможности ввести пользователей в контекст перед голосованием. Спасибо! И так
Преамбула
Работая со старым унаследованным кодом, порой встречаются достаточно проблемные участки, которые есть желание переписатьисправитьпеределать, но нет такой возможности. Этот код может быть с ошибками, которые не исправляются годами и с ними приходится мириться. Что делать с таким кодом?
Читать полностью »
Я, наверное, знаю ООП. Опыт объектно-ориентированного программирования и дизайна. Ответ «не знающим ООП.»
2012-08-06 в 8:24, admin, рубрики: java, абстрагирование, инкапсуляция, интерфейсы, наследование, ооп, Программирование, проектирование, проектирование взаимодействия, проектирование интерфейсов, метки: абстрагирование, инкапсуляция, интерфейсы, наследование, ооп, проектирование, проектирование взаимодействия, проектирование интерфейсовПосле появления статей типа "Я не знаю ООП" — возникает желание внести ясность, «сорвать покровы» и «докопаться до истины».
Принципы объектно-ориентированности
Обычно выделяют (читай: на собеседовании требуют назвать) четыре «принципа объектно-ориентированного программирования»: абстракцию, инкапсуляцию, наследование и полиморфизм.
На мой взгляд (не говоря о том, что абстракция и полиморфизм могут быть запросто отнесены к подразделам наследования), принцип тут один, в общем, тот же самый, что при проектировании баз данных: представление всего в виде объекта — некоторой штуковины со свойствами. Набор обычно бывает фиксированным, и тогда говорят о классе объектов, а даже если понятия класса и нет, то наличие свойств с определёнными названиями подразумевается логикой программы, т.е. нечто типа класса в виде некоего минимального набора свойств всё равно присутствует. В общем, воззрения восходят к давнему С-шному/паскалевскому типу данных struct/record. Потом к этому добавили немного «функциональности» (в смысле функционального программирования): значением свойства может быть функция, причём такая, которая имеет доступ к самой структуре/записи, значением одного из свойств которой она является. Сей феномен, в лучших традициях немецкого латиноязычного нейминга (когда опция называется «вариантом», а степень числа — «потенцией»), назвали «методом». Желание повторно использовать код, в сочетании с представлением каждого предмета как некоего подобия паскалевской «записи», привело к появлению концепции «наследования».Читать полностью »
Порядок выполнения callback-ов при наследовании
2012-03-31 в 8:54, admin, рубрики: callbacks, ruby, наследование, метки: callbacks, наследованиеRuby — очень интересный язык. Одной из его особенностей является возможность выполнения заданных функций при добавлении модуля в класс. Стандартный пример выглядит следующим образом:
module MyModule
module InstanceMethods
end
module ClassMethods
end
def self.included(base)
base.include(InstanceMethods)
base.extend(ClassMethods)
end
end
Здесь создаются два под-модуля в рамках текущего модуля для разделения методов инстанса и методов класса. При «примешивании» модуля MyModule в класс выполняется функция included, которая добавляет необходимые методы класса и методы объектов класса.
Не так давно я открыл для себя еще одну подобную функцию, которая выполняется при наследованииЧитать полностью »
Совершенный код / [Из песочницы] Неверное использование паттерна проектирования «Мост» / «Bridge»
2012-02-16 в 17:45, admin, рубрики: агрегация, наследование, паттерны проектирования, метки: агрегация, наследование, паттерны проектирования Предистория
Я прочитал эту статью о паттерне проектирования «Мост». Увы, его очень часто используют не верно. Более того, я затем открыл книгу Приемы объектно-ориентированного проектирования. Паттерны проектирования. Оказалось и там авторы очень смутно декларируют причины его наличия и когда его использовать. Поэтому ниже я вам сообщу как и зачем подобное использовать.Что такое паттерн проектирования «Мост» на самом деле
Если знать объектно-ориентированное программирование, то со всей ответственностью заявляю, что знать о паттернах совершенно не обязательно. Паттерны это лишь частное, и не всегда самое удачное, решениеЧитать полностью »