В этой статье представлен паттерн, который может быть использован для обеспечения динамического связывания без использования виртуальных функций для вызова перегруженных методов для объектов неоднородного контейнера при его обходе. Читать полностью »
Рубрика «ооп» - 42
Полиморфизм без виртуальных функций
2013-06-10 в 13:05, admin, рубрики: c++, CRTP, pattern, sfinae, virtual, ненормальное программирование, ооп, полиморфизм, метки: c++, CRTP, pattern, sfinae, virtual, ооп, полиморфизмСоветы новичкам при проектировании модульных производственных систем
2013-06-04 в 18:30, admin, рубрики: .net, Анализ и проектирование систем, ооп, ошибки, проектирование, метки: .net, ошибки, проектирование В этой статье я попытаюсь поделиться своим опытом в проектировании пользовательской бизнес-логики. Это явно не претендует на полноценный ликбез, т.к. я всего лишь вспоминаю то, через что прошёл лично я, какие ошибки я допустил, и как мне их удалось (или не удалось) исправить в будущем. Наверняка, опытные системные архитекторы уже все проходили и знают, однако надеюсь, что некоторые советы таки будут полезны.
Мы использовали (и используем) клиентскую часть на WPF/Silverlight, WCF сервисы и СУБД Oracle, Postrges, MsSQL. Код написан по MVVM, использована Prism для модульности и навигации. Не могу точно сказать, какие из тезисов подойдут для других платформ и языков.
Так сложилось, что в какой-то момент мне, совершенно заурядному на то время программисту, выпала задача проектировать большую и сложную систему учета данных с большим количеством условий, переходов, этапов работы. Система была предназначена для ввода данных о жителях, регулярных заседаний по выдаче им пропусков и отказов, продления пропусков, прекращения их деятельности, штрафов, и многих других мелочей. Сейчас ядро системы уже большей частью переписано, говнокод исчез, использованы новые и последние технологии, платформы.
Итак, поехали.
Читать полностью »
Классы в lua, или избавляемся от двоеточия
2013-06-03 в 19:13, admin, рубрики: Lua, классы, ненормальное программирование, ооп, метки: lua, классы, ооп Как всем известно, в lua нет как таковых классов и объектов. Однако есть метатаблицы и синтаксический сахар.
С помощью указанных механизмов достаточно просто реализовать подобие классов.
В итоге и получается нечто такое:
local MyClass = {} -- the table representing the class, which will double as the metatable for the instances
MyClass.__index = MyClass -- failed table lookups on the instances should fallback to the class table, to get methods
-- syntax equivalent to "MyClass.new = function..."
function MyClass.new(init)
local self = setmetatable({}, MyClass)
self.value = init
return self
end
function MyClass.set_value(self, newval)
self.value = newval
end
function MyClass.get_value(self)
return self.value
end
local i = MyClass.new(5)
-- tbl:name(arg) is a shortcut for tbl.name(tbl, arg), except tbl is evaluated only once
print(i:get_value()) --> 5
i:set_value(6)
print(i:get_value()) --> 6
Всё это конечно хорошо, даже при определённой сноровке можно реализовать наследование…
Но где public и private члены класса? Дефакто в этом примере они все public. Да ещё и надо помнить, где использовать двоеточие:
MyClass:myFunc()
а где просто одну точку:
MyClass.myOtherFunc()
А статические члены класса? Неужели придётся отказываться?
Читать полностью »
Работа с переменными класса класса-наследника в базовом классе
2013-06-03 в 8:29, admin, рубрики: Delphi, ооп, Песочница, метки: Delphi, оопЗачем это нужно?
С такой необходимостью я столкнулся, например, при сериализации классов. Было желание вынести весь рутинный код и информацию о классах-наследниках в базовый класс. Ну, лень ведь, прописывать одно и то же для каждого дочернего класса. Вот и призадумался, может сюда дженерики прикрутить.
Читать полностью »
Реляционное отображение коллекций — альтернатива объектно-реляционному отображению?
2013-05-29 в 12:03, admin, рубрики: orm, python, sql, ооп, Программирование, метки: orm, sql Данный текст рассматривает вкратце особенности объектно-реляционного отображения (Object-Relational Mapping — ORM) и вводит новое понятие реляционного отображения коллекций (Collection-Relational Mapping — CoRM), предлагая обсудить перспективы и возможности технической реализации новой концепции долговременного хранения состояния объектов
Читать полностью »
Статические члены класса. Не дай им загубить твой код
2013-05-28 в 7:08, admin, рубрики: php, static, ооп, переводыДавно хотел написать на эту тему. Первым толчком послужила статья Miško Hevery "Static Methods are Death to Testability". Я написал ответную статью, но так и не опубликовал ее. А вот недавно увидел нечто, что можно назвать «Классо-Ориентированное Программирование». Это освежило мой интерес к теме и вот результат.
«Классо-Ориентированое Программирование» — это когда используются классы, состоящие только из статических методов и свойств, а экземпляр класса никогда не создается. В этой статье я буду говорить о том, что:
- это не дает никаких преимуществ по сравнению с процедурным программированием
- не стоит отказываться от объектов
- наличие статических членов класса != смерть тестам
Хотя эта статья про PHP, концепции применимы и к другим языкам.
Читать полностью »
Чудесное введение в программирование
2013-05-22 в 8:05, admin, рубрики: ruby, ооп, Песочница, Программирование, метки: ruby, ооп, ПрограммированиеДоброго времени суток хабр.
Хотел бы преподнести на суд общественности перевод одной чудесной статьи, в которой описаны базовые принципы программирования. Пару слов о том — зачем собственно это все и кому это надо? Отвечаю — последние несколько месяцев я, сам начинающий программист, активно пытаюсь переквалифицировать свою девушку из ее никому не нужной не перспективной экономической специальности в нашу развивающуюся IT-сферу. В этом нелегком труде мне приходится шерстить интернет в поисках в первую очередь интересных материалов, чтобы разбить ее стереотипы насчет того что код — это скучно и нудно. К моему глубокому сожалению, таких материалов не так уж много. Я уверен, есть огромное количество новичков, которые регулярно читают хабр и эта статья будет им крайне интересна и полезна.
Читать полностью »
Bataline Framework и 1С-Битрикс — качество, удобство, быстрота
2013-05-16 в 13:10, admin, рубрики: 1С-Битрикс, php, ооп, метки: 1С-Битрикс, PHP, оопОсновное, что может отпугнуть сильных веб-разработчиков от перехода на CMS 1С-Битрикс — это количество и качество кода, необходимое для выполнения стандартных процедур для манипуляции с данными (создание, изменение, удаление и просмотр).
В самом деле, эти GetList’ы в сложных компонентах превращаются в бесконечный поток кода, по-сути не выполняющего никакой бизнес-логики.
Мы нашли решение, а точнее создали его. Встречайте Bataline Framework.
Читать полностью »
Встраивание своей классовой структуры в проект на CodeIgniter
2013-05-05 в 14:56, admin, рубрики: codeigniter, php, ооп, паттерны, фабрика объектов, метки: codeigniter, PHP, ооп, паттерны, фабрика объектовДоброго времени суток, товарищи.
В этом посте расскажу о том, как обойти ограничения, которые накладывает фреймворк на разработчика, при этом оставив за собой возможность воспользоваться его функциональностью.
Я занимаюсь разработкой ресурса для кросс-постинга в социальные сети. Изначально продукт был предназначен только для Вконтакте и Facebook и для работы с API было выделено по одному контроллеры и по одной модели, плюс модель для работы с cURL. Пока была необходимость работать только с двумя социальными сетями такая классовая структура проекта не выглядела удручающей. Но стоило добавить работу ещё с несколькими соц. сетями, стало очевидно что такая модель ведёт к хаосу и полному бардаку как на стороне работы с API так и на стороне клиента. Чего стоит ветвление из 10 else if для просмотра данных пользователя или 10 ajax запросов для отправки сообщений в социальные сети. Было принято решение отрефакторить весь этот ужас, воспользовавшись паттерном Фабрика. Всё представлялось просто: описываем интерфейс с общим функционалом работы с API, делаем фабричный класс и единственный контроллер, который будет реквайрить фабричный класс. Но как только начали переносить функционал на новую парадигму, нас осенило. Вся работа в бд, пользовательскими данными, логами и https держится на CI моделях и библиотеках. Тут то я понял как был неправ, когда писал в курсовой что CodeIgniter не накладывает ограничений на разработчика — ещё как накладывает. Стоит немного шагнуть в своём решении за рамки модели MVC, возникает проблема — как включить это решение в проект.
Читать полностью »
Композиция vs наследование
2013-04-21 в 19:50, admin, рубрики: c++, агрегация, композиция, наследование, ооп, Программирование, Стратегия, метки: агрегация, композиция, наследование, ооп, Стратегия Как и всем разработчикам, мне часто приходилось читать и слышать утверждение, что «композиция всегда лучше наследования». Наверное, даже слишком часто. Однако я не склонен принимать что-либо на веру, поэтому давайте разберёмся, так ли это.
Читать полностью »
