Разработка → Примеры паттернов в реальной жизни
Хорошая, хоть и старая (97 год) статья в которой приведены примеры применения паттернов в вещах, которые не имеют отношения к разработке. Такой подход отлично иллюстрирует паттерны и делает их более доступными для понимания.
Например отлично показан паттерн Фасад: интерфейсы офисных устройств можно сильно упростить с помощью секретарши.
Или например паттерн Бридж, который показан на примере выключателя которым можно управлять лампочкой, вентилятором или любым другим прибором.
Например отлично показан паттерн Фасад: интерфейсы офисных устройств можно сильно упростить с помощью секретарши.
Или например паттерн Бридж, который показан на примере выключателя которым можно управлять лампочкой, вентилятором или любым другим прибором.
Образование 2.0 → ООП с примерами (часть 2)
Волею судьбы мне приходится читать спецкурс по паттернам проектирования в вузе. Спецкурс обязательный, поэтому, студенты попадают ко мне самые разные. Конечно, есть среди них и практикующие программисты. Но, к сожалению, большинство испытывают затруднения даже с пониманием основных терминов ООП.
Для этого я постарался на более-менее живых примерах объяснить базовые понятия ООП (класс, объект, интерфейс, абстракция, инкапсуляция, наследование и полиморфизм).
Первая часть посвящена классам, объектам и интерфейсам.
Вторая часть, представленная ниже, иллюстрирует инкапсуляцию, полиморфизм и наследование
Для этого я постарался на более-менее живых примерах объяснить базовые понятия ООП (класс, объект, интерфейс, абстракция, инкапсуляция, наследование и полиморфизм).
Первая часть посвящена классам, объектам и интерфейсам.
Вторая часть, представленная ниже, иллюстрирует инкапсуляцию, полиморфизм и наследование
Образование 2.0 → ООП с примерами (часть 1)
Волею судьбы мне приходится читать спецкурс по паттернам проектирования в вузе. Спецкурс обязательный, поэтому, студенты попадают ко мне самые разные. Конечно, есть среди них и практикующие программисты. Но, к сожалению, большинство испытывают затруднения даже с пониманием основных терминов ООП.
Для этого я постарался на более-менее живых примерах объяснить базовые понятия ООП (класс, объект, интерфейс, абстракция, инкапсуляция, наследование и полиморфизм).
Первая часть, представленная ниже, посвящена классам, объектам и интерфейсам.
Вторая часть иллюстрирует инкапсуляцию, полиморфизм и наследование
Для этого я постарался на более-менее живых примерах объяснить базовые понятия ООП (класс, объект, интерфейс, абстракция, инкапсуляция, наследование и полиморфизм).
Первая часть, представленная ниже, посвящена классам, объектам и интерфейсам.
Вторая часть иллюстрирует инкапсуляцию, полиморфизм и наследование
JavaScript → Перегрузка функций в JS
Как известно, в Javascript нельзя создать несколько функций, различающихся только списком параметров: последняя созданная перезапишет предыдущие. Про различие на уровне типов параметров говорить не приходится вообще. Обычно, если программист хочет создать функцию с множественным интерфейсом, он пишет что-то вроде такого:
Пока пример выглядит не очень страшно, однако интерфейсов может со временем стать заметно больше, тогда функция станет плохочитаема. Посмотрим, что можно с этим сделать.
- // getRectangleArea(x1, y1, x2, y2) или
- // getRectangleArea(width, height)
- function getRectangleArea(x1, y1, x2, y2) {
- if(arguments.length==2) return x1*y1;
- return (x2-x1)*(y2-y1);
- }
* This source code was highlighted with Source Code Highlighter.Пока пример выглядит не очень страшно, однако интерфейсов может со временем стать заметно больше, тогда функция станет плохочитаема. Посмотрим, что можно с этим сделать.
C++ → Эффективность C++ на современных ПК
В виду ограничения на размер, публикую заметку в виде статьи, а не как ссылку с аннотацией.
Со времён, когда проектировался С++, относительная (к скорости оперативной памяти) скорость процессора выросла в 400 раз. Плюс к тому, у процессора появились большие кэши и предсказание ветвлений в коде. Всё это вместе самым серьёзным образом сказывается на эффективности С++ на современных платформах. Ниже даю аннотацию и пару ссылок, где предлагается использовать эти факты для повышения эффективности кода.
.NET → 3й подкаст Петербургской группы Alt.Net
Литература для .Net-разработчика
Участники: dnesteruk & butaji - CLR via C# (Richter, 3rd edition coming up), C# in a nutshell, C# in Depth (skeet)
- Design Patterns (GoF), Design Patterns in C#, Refactoring to Patterns, DP in Java
- Martin Fowler Signature Series: PoEAA, xUnit Test Patterns, Integration Patterns, Test-Driven Development, Implementation Patterns
- Agile Software Development on C++ and C# (both 1st and 2nd versions) by Robert C Martin
- DDD, Applying DDD by Nilsson, DDD with C#/.NET: Problem — Design — Solution
- Generative Programming
- Expert F# — the book of rulership, also Foundations of F# and F# for scientists
- Building DSLs in Boo
Non-.Net
- The C++ programming language, Essential STL :) (hey, some of us do interop)
- Learn Ruby, Python Cookbook
- CodeComplete, Code Craft
Domain-specific books:
- 4 books ASP.NET by Dino Esposito
- Applications = Code + Markup
- Asp.Net MVC in Action, Asp.Net MVC Quickly
- Inside WSS 3.0
ООП → Принцип подстановки Барбары Лисков
Привет, хабрачеловеки!
Захотелось вот поделиться сокровенным знанием по этой теме. К тому же материалов по этому, достаточно важному принципу проектирования классов и их наследования, в Рунете как-то негусто. Имеются формулировки вида:
«Пусть q(x) является свойством верным относительно объектов x некоторого типа T. Тогда q(y) также должно быть верным для объектов y типа S, где S является подтипом типа T.» © Wikipedia
Но онивыносят мой мозг меня совершенно не радуют.
Если хочется услышать объяснение этойхрени умной фразы — прошу под кат.
Захотелось вот поделиться сокровенным знанием по этой теме. К тому же материалов по этому, достаточно важному принципу проектирования классов и их наследования, в Рунете как-то негусто. Имеются формулировки вида:
«Пусть q(x) является свойством верным относительно объектов x некоторого типа T. Тогда q(y) также должно быть верным для объектов y типа S, где S является подтипом типа T.» © Wikipedia
Но они
Если хочется услышать объяснение этой
Блог им. meettya → Botox — разгоняем лосей и мышей
В мире Perl очень много волшебства. Оно завораживает и готовит ловушку каждому, кто начинает использовать магию по любому поводу.
Хочется предостеречь Вас от этого, особенно если Вы используете не балаганные трюка, а истинную магию.
Мой совет прост — выбирайте инструмент под задачу, верно ее оценив.
Например, не стоит использовать Moose или Mouse, если Вам всего лишь неохота каждый раз писать
Вы забиваете гвозди микроскопом.
Perl феноменально удобен в отношении ОО-style программирования, вся загвоздка в том, что это неочевидно.
Все, что требуется для достижения саматхи — пару раз вдумчиво перечитать главу о typeglob.
Или воспользоваться пакетом Botox.
Хочется предостеречь Вас от этого, особенно если Вы используете не балаганные трюка, а истинную магию.
Мой совет прост — выбирайте инструмент под задачу, верно ее оценив.
Например, не стоит использовать Moose или Mouse, если Вам всего лишь неохота каждый раз писать
my $self = bless({}, ref $invocant || $invocant);. Вы забиваете гвозди микроскопом.
Perl феноменально удобен в отношении ОО-style программирования, вся загвоздка в том, что это неочевидно.
Все, что требуется для достижения саматхи — пару раз вдумчиво перечитать главу о typeglob.
Или воспользоваться пакетом Botox.
Lisp → Scheme и классы
Представлю вам последнее видео, посвященное языку программирования Scheme. Дальше мы переходим на Пролог, а напоследок постараемся реализовать классы в функциональном языке.
Если не доступен режим HD, то перейдите, пожалуйста, на vimeo.
Полное решение третьего задание по курсу Programming Paradigms, включающее набранный в видео код.
Видео доступно:
Если не доступен режим HD, то перейдите, пожалуйста, на vimeo.
Полное решение третьего задание по курсу Programming Paradigms, включающее набранный в видео код.
Видео доступно:
- На Vimeo
- На YouTube (часть 1, часть 2)
- На rpod.ru
JavaScript → Попытка классификации и анализа существующих подходов к наследованию в Javascript
Некоторое время назад у меня дошли руки до темы, которая давно уже меня нервирует интересует. Эта тема — наследование в Javascript.
В сети есть много статей по данному вопросу, но мне не удалось найти обобщающего анализа, который бы удовлетворил меня своей полнотой и логикой. Почему хотелось найти именно обобщающий анализ? Дело в том, что особая, я бы сказал, уникальная сложность объектно ориентированного программирования в JS состоит в шокирующем (во всяком случае, меня) разнообразии его возможных реализаций. После довольно продолжительных неудачных поисков я решил попробовать разобраться в этом вопросе самостоятельно.
Хочу сразу сказать, что я не претендую на глубокое понимание ООП в Javascript, и даже не претендую на глубокое понимание ООП вообще. Я буду рад, если моя попытка анализа окажется кому-нибудь полезной, но основная цель публикации, в некотором смысле, противоположная — мне бы хотелось самому воспользоваться замечаниями людей, которые лучше меня ориентируются в теме, чтобы прояснить ее для себя.
В сети есть много статей по данному вопросу, но мне не удалось найти обобщающего анализа, который бы удовлетворил меня своей полнотой и логикой. Почему хотелось найти именно обобщающий анализ? Дело в том, что особая, я бы сказал, уникальная сложность объектно ориентированного программирования в JS состоит в шокирующем (во всяком случае, меня) разнообразии его возможных реализаций. После довольно продолжительных неудачных поисков я решил попробовать разобраться в этом вопросе самостоятельно.
Хочу сразу сказать, что я не претендую на глубокое понимание ООП в Javascript, и даже не претендую на глубокое понимание ООП вообще. Я буду рад, если моя попытка анализа окажется кому-нибудь полезной, но основная цель публикации, в некотором смысле, противоположная — мне бы хотелось самому воспользоваться замечаниями людей, которые лучше меня ориентируются в теме, чтобы прояснить ее для себя.