Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Патерни проектування




Використання функцій

Функції використовуються для розбиття великих блоків коду на менші, більш керовані одиниці. Міститься всередині функції код виконує певне завдання і повертає значення. PHP містить два типи функцій - визначені користувачем (або створені програмістом) і внутрішні (вбудовані функції), які є частиною визначення мови PHP. Цей розділ присвячений створенню та застосуванню певних функцій користувача.

Певні функції користувача створюються за допомогою ключового слова function. Вони особливо корисні у великих програмах PHP, так як можуть містити блоки коду, які можуть викликатися чи використовуватися в програмі, що дозволяє уникнути повторного переписування коду. Далі представлений приклад простої визначеної користувачем функції PHP:

function AddNumbers ($ num1, $ num2)

{

echo "Це приклад функції PHP. Вона обчислює суму двох чисел і повертає

результат, що викликається у програмі ";

return $ num1 + $ num2;

}

Певні функції користувача можуть викликатися в будь-якому місці блоку коду PHP. У PHP функція виконується при використанні в коді її імені. Після виклику функція отримує всі передані їй значення у формі параметрів, виконує певні завдання і повертає значення, що викликає програма. Простий приклад показаний нижче.

<? Php

function AddNumbers ($ num1, $ num2)

{

return $ num1 + $ num2;

}

echo "Сума 5 і 2 дорівнює". AddNumbers (5,2);

?>

Проте певна на початку функція AddNumbers () викликається тільки пізніше в програмі. Виклик функції відбувається в операторі echo. Виводиться рядок "Сума 5 і 2 дорівнює". Ім'я функції з'єднується з рядком виведення, викликаючи тим самим функцію. Для функції передається два параметри - 5 і 2. Вони присвоюються параметрами функції $ num1 і $ num2. Параметри складаються, і викликається оператор return, щоб "повернути" значення або суму двох чисел в те місце в блоці коду PHP, який спочатку викликав функцію. Висновок результату показаний нижче:

Сума 5 і 2 дорівнює 7

Імена функцій слідують тим же правилам, що і змінні у PHP. Допустимі імена можуть починатися з букви або підкреслення, після чого може слідувати будь-які літери, цифри або підкреслення.

 

В якості основи проектування інформаційних систем застосовуються "типові рішення" або "шаблони проектування" (Patterns).

Шаблони проектування (патерн, design pattern) - це багато разів застосовувана архітектурна конструкція, що надає рішення для загальної проблеми проектування в рамках конкретного контексту й описує значимість цього рішення.

Патерн не є закінченим зразком проекту, який може бути прямо перетворений в код, скоріше це опис або зразок для того, як вирішити завдання, таким чином, щоб це можна було використовувати в різних ситуаціях. Об'єктно-орієнтовані шаблони часто показують відносини і взаємодії між класами або об'єктами, без визначення того, які кінцеві класи чи об'єкти додатки будуть використовуватися. Алгоритми не розглядаються як шаблони, так як вони вирішують завдання обчислення, а не проектування.

У 1970-і роки архітектор Крістофер Олександр склав набір шаблонів проектування. В області архітектури ця ідея не отримала такого розвитку, як пізніше в області програмної розробки. Згідно з визначенням Крістофера Олександра: "Кожне типове рішення описує якусь повторювану проблему і ключ до її розгадки, причому таким чином, що ви можете користуватися цим ключем багаторазово, жодного разу не прийшовши до одного й того ж результату".

У 1987 році Кент Бек і Вард Каннігем взяли ідеї Олександра та розробили шаблони відповідно до розробки програмного забезпечення для розробки графічних оболонок мовою Smalltalk.

У 1988 році Ерік Гамма почав писати докторську дисертацію при Цюріхському університеті про загальну переносимість цієї методики на розробку програм.

У 1989-1991 роках Джеймс Коплін трудився над розробкою ідіом для програмування на C + + та опублікував у 1991 році книгу Advanced C + + Idioms. У цьому ж році Ерік Гамма закінчує свою докторську дисертацію і переїжджає до США, де у співробітництві з Річардом Хелмом, Ральфом Джонсоном і Джоном Вліссідсом публікує книгу Design Patterns - Elements of Reusable Object-Oriented Software. У цій книзі описані 23 шаблона проектування. Також команда авторів цієї книги відома громадськості під назвою Банда чотирьох (Gang of Four, часто скорочується до GoF). Саме ця книга стала причиною зростання популярності шаблонів проектування.

Іншим видатним діячем у галузі проектування програмних систем, який підтримав використання патернів, є Мартін Фаулер, який написав книгу "Архітектура корпоративних програмних додатків" (Patterns of Enterprise Application Architecture). Як зазначив Мартін Фаулер у своїй книзі "збираючись скористатися типовими рішеннями, не забувайте, що вони тільки відправна точка, а не пункт призначення".

У книзі Крейга Лармана "Застосування UML і шаблонів проектування" описано 9 шаблонів GRASP (General Responsibility Assignment Software Patterns, загальні зразки розподілу обов'язків) - патернів, використовуваних в об'єктно-орієнтованому проектуванні для вирішення спільних завдань за призначенням обов'язків класам і об'єктам. Кожен з них допомагає розв'язати певну проблему, що виникає при об'єктно-орієнтованому аналізі, і яка виникає практично в будь-якому проекті з розробки програмного забезпечення.

Головна користь кожного окремого шаблону полягає в тому, що він описує рішення цілого класу абстрактних проблем. Також той факт, що кожен шаблон має своє ім'я, полегшує дискусію про абстрактні структури даних (ADT) між розробниками, так як вони можуть посилатися на відомі шаблони. Таким чином, за рахунок шаблонів проводиться уніфікація термінології, назв модулів і елементів проекту.

Правильно сформульований шаблон проектування дозволяє, відшукавши вдале рішення, користуватися ним знову і знову.

Однак іноді шаблони консервують громіздку і малоефективну систему понять, розроблену вузькою групою. Коли кількість шаблонів зростає, перевищуючи критичну складність, виконавці починають ігнорувати шаблони і всю систему, з ними пов'язану. Нерідко шаблонами замінюється відсутність або недоліки документації, яка складна програмному середовищі.

Є думка, що сліпе застосування шаблонів з довідника, без осмислення причин і передумов виділення кожного окремого шаблону, уповільнює професійне зростання програміста. Люди, які дотримуються цієї думки, вважають, що знайомитися зі списками шаблонів треба тоді, коли "доріс" до них в професійному плані - і не раніше. Хороший критерій потрібного ступеня професіоналізму - виділення шаблонів самостійно, на підставі власного досвіду. При цьому, зрозуміло, знайомство з теорією, пов'язаної з шаблонами, корисно на будь-якому рівні професіоналізму і направляє розвиток програміста в правильну сторону. Сумніву піддається тільки використання шаблонів "за довідником".

Шаблони можуть пропагувати погані стилі розробки додатків, і часто сліпо застосовуються.

аблони проектування класифікують наступним чином:

- Патерни проектування класів / об'єктів

Структурні патерни проектування класів / об'єктів

- Адаптер (Adapter) - GoF

- Декоратор (Decorator) або Оболонка (Wrapper) - GoF

- Заступник (Proxy) або Сурогат (Surrogate) - GoF

- Інформаційний експерт (Information Expert) - GRASP

- Компонувальник (Composite) - GoF

- Міст (Bridge), Handle (описувач) або Тіло (Body) - GoF

- Низька зв'язаність (Low Coupling) - GRASP

- Пристосуванець (Flyweight) - GoF

- Стійкий до змін (Protected Variations) - GRASP

- Фасад (Facade) – GoF

Патерни проектування поведінки класів / об'єктів

- Інтерпретатор (Interpreter) - GoF

- Ітератор (Iterator) або Курсор (Cursor) - GoF

- Команда (Command), Дія (Action) або Транзакція (Транзакція) - GoF

- Спостерігач (Observer), Опублікувати - підписатися (Publish - Subscribe) або Delegation Event Model - GoF

- Не розмовляйте з невідомими (Don't talk to strangers) - GRASP

- Відвідувач (Visitor) - GoF

- Посередник (Mediator) - GoF

- Стан (State) - GoF

- Стратегія (Strategy) - GoF

- Зберігач (Memento) - GoF

- Ланцюжок обов'язків (Chain of Responsibility) - GoF

- Шаблонний метод (Template Method) - GoF

- Високе зачеплення (High Cohesion) - GRASP

- Контролер (Controller) - GRASP

- Поліморфізм (Polymorphism) - GRASP

- Штучний (Pure Fabrication) - GRASP

- Перенаправлення (Indirection) - GRASP

Твірні патерни проектування

- Абстрактна фабрика (Abstract Factory, Factory), ін. назва Інструментарій (Kit) - GoF

- Одинак (Singleton) - GoF

- Прототип (Prototype) - GoF

- Творець примірників класу (Creator) - GRASP

- Будівельник (Builder) - GoF

- Фабричний метод (Factory Method) або Віртуальний конструктор (Virtual Constructor) - GoF

- Архітектурні системні патерни

Структурні патерни

- Репозиторій

- Клієнт / сервер об'єктно - орієнтований, Модель предметної області (Domain Model), модуль таблиці (Data Mapper)

- Багаторівнева система (Layers) чи абстрактна машина

- Потоки даних (конвеєр або фільтр)

Патерни управління

- Патерни централізованого управління

- Виклик - повернення (сценарій транзакції - окремий випадок)

- Диспетчер

- Патерни управління, засновані на подіях

- Передача повідомлень

- Керування перериваннями

- Патерни, що забезпечують взаємодію з базою даних

- Активний запис (Active Record)

- Одиниця роботи (Unit Of Work)

- Завантаження на вимогу (Lazy Load)

- Колекція об'єктів (Identity Map)

- Безліч записів (Record Set)

- Успадкування з однією таблицею (Single Table Inheritance)

- Успадкування з таблицями для кожного класу (Class Table Inheritance)

- Оптимістичне автономне блокування (Optimistic Offline Lock)

- Відображення з допомогою зовнішніх ключів

- Відображення з допомогою таблиці асоціацій (Association Table Mapping)

- Песимістичне автономне блокування (Pessimistic Offline Lock)

- Поле ідентифікації (Identity Field)

- Перетворювач даних (Data Mapper)

- Збереження сеансу на стороні клієнта (Client Session State)

- Збереження сеансу на стороні сервера (Server Session State)

- Шлюз запису даних (Row Data Gateway)

- Шлюз таблиці даних (Table Data Gateway)

- Патерни, призначені для представлення даних у Web

- Модель-представлення-контролера (Model View Controller)

- Контролер сторінок (Page Controller)

- Контролер запитів (Front Controller)

- Представлення за шаблоном (Template View)

- Представлення з перетворенням (Transform View)

- Двоетапне подання (Two Step View)

- Контролер додатка (Application Controller)

Патерни інтеграції корпоративних інформаційних систем

- Структурні патерни інтеграції

- Взаємодія "точка - точка"

- Взаємодія "зірка" (інтегруюча середа)

- Змішаний спосіб взаємодії

- Патерни за методом інтеграції

- Інтеграція систем за даними (data-centric)

- Функціонально-центричний (function-centric) підхід

- Об'єктно-центричний (object-centric)

- Інтеграція на основі єдиної понятійної моделі предметної області (concept-centric)

- Патерни інтеграції за типом обміну даними

- Файловий обмін

- Загальна база даних

- Віддалений виклик процедур

- Обмін повідомленнями

Також на сьогоднішній день існує ряд інших шаблонів:

• Carrier Rider Mapper, надання доступу до збереженої інформації;

• аналітичні шаблони, описують основний підхід для складання вимог для програмного забезпечення (requirement analysis) до початку самого процесу програмної розробки;

• комунікаційні шаблони, описують процес спілкування між окремими учасниками / співробітниками організації;

• організаційні шаблони, описують організаційну ієрархію підприємства / фірми;

• Анти-патерни (Anti-Design-Patterns) описують як не слід поступати при розробці програм, показуючи характерні помилки в дизайні і в реалізації;

Розглянемо докладніше деякі з патернів проектування.

Огляд патернів

Патерни проектування класів / об'єктів

Структурні патерни (Structural)

До структурних патернів відносяться:

• Адаптер (Adapter) - GoF;

• Декоратор (Decorator) або Оболонка (Wrapper) - GoF;

• Заступник (Proxy) або Сурогат (Surrogate) - GoF;

• Інформаційний експерт (Information Expert) - GRASP;

• Компонувальник (Composite) - GoF;

• Міст (Bridge), Handle (описувач) або Тіло (Body) - GoF;

• Низька зв'язаність (Low Coupling) - GRASP;

• Пристосуванець (Flyweight) - GoF;

• Стійкий до змін (Protected Variations) - GRASP;

• Фасад (Facade) - GoF.

 




Поделиться с друзьями:


Дата добавления: 2017-02-01; Просмотров: 138; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.009 сек.