Пишу на данный момент дипломную работу по специальности. Дипломная работа связана с системами проведения занятий, электронного обучения, дистанционного обучения, и подобными системами. Для справки о LMS можно почитать в wiki.
В процессе анализа предметной области и поиска аналогов, читал об использовании таких систем в других странах в частности США. У нас такие системы используются на базе ВУЗов для организации дистанционного обучения например студентов очной формы обучения. Применение в других же сферах я так и не нашел. Но в США пошли дальше, на базе таких систем организовано обучение и повышение квалификации персонала государственных учреждений, а также коммерческих организаций, управляющие структуры которых, заинтересованы в высокой квалификации специалистов организации, а также общей конкурентоспособности организации.
Читать далее...
Данный шаблон используется другими шаблонами и является основным, потому что он повышает надежность и управляемость кода, за счет наложения запрета на изменение содержимого объекта класса, реализующего данный шаблон. При этом уменьшаются затраты на совместный доступ к объекту, потому как нет необходимости в синхронизации потоков. Данный шаблон используется или может использоваться многими другими шаблонами проектирования, например объекты значений (Value objects).
Реализация шаблона проста, в конструктор передаются значения, которые определяют неизменяемое содержимое класса, а также существует набор get-методов, которые позволяют получить данные значения. Set-методы, предназначенные для изменения данных отсутствуют.
Пример кода демонстрирующий данный шаблон проектирования:
Читать далее...
Шаблон делает клиентские классы независимыми от тех классов, которые реализуют поведение (сервис) и при этом позволяет обеспечить согласованное поведение между ними. Мы используем преимущества шаблонов “Interface” и “Abstract superclass” которые включены в рассматриваемый шаблон проектирования. Можно сделать классы которые реализуют некоторый интерфейс, и при этом наследующиеся от абстрактного класса.

При использовании данного шаблона проектирования, обычно интерфейс является открытым, а абстрактный класс закрытым, и включает в себя общие части реализации классов реализации ConcreteClass1, ConcreteClass2 и т.д.
Ни для кого ни секрет, что у компании Google есть домены во всех национальных доменных зонах, так же ни для кого не секрет, что если сегодня в какой-то стране значимый день в истории, то по адресу google.xx (где xx – национальный домен страны) мы можем увидеть логотип google стилизованный под это событие.
![День числа PI piday10-hp[1]](http://juravskiy.ru/wp-content/uploads/2010/03/piday10hp1_thumb.gif)
Недавно искал официальный адрес компании, и набрел на галерею их логотипов Google за все года. Был удивлен, что к олимпиаде в Ванкувере было сделано так много логотипов, для каждого вида спорта, а например в день создания штрих кода, логотип выглядел как штрих код – просто и со вкусом. Возле каждого логотипа в скобках можно увидеть значимость события, т.е. для каких стран оно актуально.
Обеспечивает согласованное поведение концептуально связанных классов, через общий абстрактный суперкласс.
Класс реализующий данный шаблон проектирования является абстрактным суперклассом, в котором инкапсулирована общая логика связанных классов. Связанные классы расширяют абстрактный класс по средством наследования. Методы с общей логикой и одинаковыми сигнатурами для всех связанных классов, помещаются в суперкласс, Методы с одинаковой сигнатурой, но зависящей от конкретной реализации подкласса, выносятся как абстрактные методы в суперкласс.

Данный шаблон проектирования уменьшает количество кода в подклассах, но при этом вносит зависимости между суперклассом и подклассами, при этом вносимые изменения в суперкласс могут внести нежелательные последствия в отдельных подклассах.