Понятие хорошего или плохого дизайна является относительным. В то же время есть некоторые устоявшиеся нормы программирования, которые в большинстве случаев гарантируют ему эффективность, сопровождаемость, тестируемость. Например, в объектно-ориентированных языках это использование инкапсуляции, наследования, полиморфизма. Есть набор шаблонов проектирования, которые в ряде случаев дают положительный эффект на дизайн приложения (а иногда и отрицательный, все зависит от ситуации). С другой стороны, есть противоположные нормы, следование которым иногда приводит к дизайну, который можно назвать проблемным. Такой дизайн как правило обладает следующими признаками (каким-то одним или несколькими одновременно):
Читать полностью »
Рубрика «ооп» - 20
Признаки проблемного дизайна
2017-07-09 в 10:15, admin, рубрики: .net, C#, design patterns, solid, ооп, Проектирование и рефакторингЧто делает язык программирования «модным»?
2017-07-07 в 21:38, admin, рубрики: pharo, smalltalk, squeak, ооп, ПрограммированиеСейчас много языков программирования, соперничающих за ваше внимание, особенно «горячие» (или «модные!») новые языки, такие как Ceylon, Crystal, Dart, Elixir, Elm, Go, Haxe, Julia, Kotlin, Rust, Swift, TypeScript. И новые, кажется, появляются каждый месяц!
Читать полностью »
Как запутать аналитика. Часть вторая: что такое моделирование предметной области?
2017-07-01 в 8:51, admin, рубрики: IT-стандарты, owl, Анализ и проектирование систем, аналитика, атрибут, моделирование предметной области, ооп, Проектирование и рефакторинг, СемантикаВ прошлой статье я говорил о заблуждениях, к которым склонны программисты и обещал рассказать про заблуждения, к которым склонны не только программисты, но и каждый из нас.
Объект учета и результат его классификации (существительные)
Проведем мысленный эксперимент. Представьте себе два хранилища моделей. В одном хранилище созданы классы для хранения моделей плавательных средств, в другом – классы для хранения моделей автомобилей. Допустим, что есть объект, который в одном хранилище описан как объект класса плавсредство, а во второй – как объект класса автомобиль. Допустим, что стоит задача объединения этих хранилищ в одно. Как вы это сделаете?
Читать полностью »
«Фабричный метод» в разработке под Android. Лучший способ обработки пушей
2017-06-30 в 10:31, admin, рубрики: android, fabric method, FCM, java, push, ооп, паттерны проектирования, Разработка под android, фабричный метод, шаблоны проектирования, метки: fabric method, Фабричный методВ этой статье я бы хотел поговорить об одном из классических шаблонов проектирования в Android-разработке: фабричном методе (Fabric method). Изучать его мы будем на примере работы с Firebase Cloud Messaging (далее FCM). Цель — донести до начинающих разработчиков, пока не овладевших в полной мере всеми достоинствами ООП, важность применения приёмов объектно-ориентированного проектирования.
Как запутать аналитика. Часть первая
2017-06-29 в 4:28, admin, рубрики: IT-стандарты, owl, Анализ и проектирование систем, аналитика, атрибуты, математика, ооп, Семантика, типизация— В армии научились совмещать пространство и время.
— Как?
— Очень просто! Прапорщик дает задание: «Сегодня будем копать от забора и до обеда»
В этой статье я начну рассказ о путаницах, которые регулярно встречаются, и которые кочуют в информационные модели без всякого критического анализа.
В прошлой статье я дал определения типу и атрибуту. Напомню их:
- Тип – это выделение кучки (подмножества) из кучи (множества) и наделение объектов этой кучки уникальным именем — существительным.
- Атрибут разделяет кучу (множество) на кучки (подмножества) и наделяет объекты этих кучек разными прилагательными.
Это было определение типа и определение атрибута на основе анализа – мы делили кучу на части. Фактически, это было построение типа при помощи анализа. Теперь я покажу, как можно строить типы и атрибуты на основе синтеза.
Читать полностью »
3 cпособа нарушить Single Responsibility Principle
2017-06-03 в 14:47, admin, рубрики: ios development, mvc, mvp, mvvm, singleton, srp, ооп, Программирование, разработка под iOS, метки: SRPSingle Responsibility Principe достаточно прост для понимания и его не сложно придерживаться.
Но в работе я достаточно часто сталкиваюсь нарушением этого принципа. В этой статье я собрал самые больные из способов нарушить SPR из тех, что я встречал.
Читать полностью »
Технологии технологиями, а главное — код
2017-05-30 в 10:08, admin, рубрики: maintainable, solid, Блог компании DevConf, ооп, Программирование, Проектирование и рефакторинг, Совершенный кодТак зачем же мы пишем этот плохой код, который изо дня в день замедляет нашу работу?
Потому, что мы тогда вынуждены были сделать что-то быстрее!
Я оставлю вас наедине с это логической несостыковкой…
На одной из лекций Роберта Мартина
У нас на DevConf будет не самый обычный мастер-класс. Там не будут рассказывать о новых технологиях или хайлоаде. Будут говорить о коде. Хорошем, плохом. Называется он Принципы хорошего кода на реальных примерах. Расспросим немного автора.
Что тебя побудило на такой мастер-класс?
Удрученность текущей ситуации в отрасли. Все одержимы технологиями. В последнее время облачными. Читаешь вакансию, перечисляют используемые технологии, необходимый опыт(который почти никогда, на самом деле, не нужен). Очень круто звучит на собеседованиях. Приходишь на проект. Смотришь на код… и он печально говорит тебе: «Пристрели меня». Смотришь глубже и понимаешь всю его печаль. Он смертельно болен. Как раковые опухоли разрослись классы, которые кто-то, словно в шутку, назвал контроллерами. Как метастазы везде расползлись копипасты. На психологию кода давит то, что он лишь жалкая обвязка для крутых облачных технологий. Но пристрелить дорого.
Читать полностью »
Тайп-хинтинг по всем канонам полиморфизма в старых версиях PHP
2017-05-24 в 10:39, admin, рубрики: php, ооп, полиморфизмtl;dr Вкратце, в данной статье я создам трейт, позволящий даже в версиях PHP младше 5.6 (до версии 5.4) добиться от компилятора поведения, подобного любому статическому языку программирования. Причём трейт будет валидировать не только входные, но и выходные парамеры тоже. Так сказать, полное погружение в тайп-хинтинг.
Данный трейт вы сможете без проблем подключить и использовать в своих веб-приложениях.
Функциональный Rust: Готовим говядину
2017-05-22 в 8:00, admin, рубрики: Rust, архитектура, критика, ненормальное программирование, ооп, функциональное программирование, эзотерические языкиИерархия исключений в современном PHP-приложении
2017-05-22 в 5:52, admin, рубрики: 42, exceptions, php, исключения, обработка ошибок, ооп, Проектирование и рефакторинг, Совершенный кодЗадача публикации: доступно изложить способ организации иерархии исключений и их обработки в приложении. Без привязки к фреймворкам и конкретной архитектуре. Описываемый способ является де-факто стандартом в сообществе: он используется во многих серьёзных библиотеках и фреймворках. В том числе Zend, Symfony. Не смотря на его логичность и универсальность, формального описания предлагаемого подхода на русском языке я не нашёл. После неоднократного устного изложения концепции коллегам, родилась мысль оформить её в виде публикации на Хабрахабр.
В языке PHP, начиная с 5-ой версии, доступен механизм исключений. В актуальной, 7-ой, версии этот механизм был улучшен и переработан с целью единнобразной обработки разных ошибок при помощи конструкции try{} catch...
В стандартной библиотеке (SPL) PHP предоставляет готовый набор базовых классов и интерфейсов для исключений. В 7-ой версии этот набор был расширен интерфейсом Throwable
. Вот диаграмма всех имеющихся в версии 7 типов (изображение — ссылка):