Программная инженерия Андрей Дмитриев andrei-dmitriev@yandex.ru ©2007-2010.

Презентация:



Advertisements
Похожие презентации
Программная иженерия Андрей Дмитриев ©
Advertisements

Программная инженерия Андрей Дмитриев ©
Язык программирования Java Дмитриев Андрей Владиславович 2007.
Программная иженерия Андрей Дмитриев ©
Язык программирования Java Дмитриев Андрей Владиславович Май 2007.
Язык программирования Java Дмитриев Андрей Владиславович Май 2007.
Язык программирования Java Дмитриев Андрей Владиславович 2007.
Язык программирования Java Дмитриев Андрей Владиславович 2007.
Программная иженерия Андрей Дмитриев ©
По данным координатам постройте фигуру, последовательно соединяя полученные точки (-1;0,2), (-1;1,8), (-2,5;0,5), (-1;0,2); (-1;-2,5), (1,5;-2,9), (1,5;-1,6),
Инструмент Line (Линия) для вычерчивания прямых линий.
Программная инженерия Андрей Дмитриев ©
Программная инженерия Дмитриев Андрей Владиславович
Автоматическая генерация кода программ с явным выделением состояний Канжелев С.Ю. магистрант СПбГУ ИТМО Шалыто А.А. доктор технических наук профессор СПбГУ.
Проектирование и дизайн ПО Дмитриев Андрей Владиславович
Стандартные программы Windows. Твой компьютерный блокнот.
Программная инженерия Дмитриев Андрей Владиславович
Язык программирования Java Дмитриев Андрей Владиславович Май 2007.
Глава 5 §28. Назначение и возможности графического исполнителя. Простые команды. Работа в программном режиме. Линейные программы для исполнителя.
Applets Inna Issajeva. Апплеты это маленькие приложения, которые размещаются на серверах Internet, транспортируются клиенту по сети, автоматически устанавливаются.
Транксрипт:

Программная инженерия Андрей Дмитриев ©

Шаблоны проектирования

Стратегия Определяет семейство алгоритмов, инкапсулируя их все и позволяя подставлять один вместо другого во время исполнения программы. Каждый такой алгоритм представляет собой стратегию. Общность программного интерфейса позволяет использовать различные стратегии независимо от контекста их использования.

Стратегия public class Painter extends JComponent { public void paint(int x[], int y[]){ switch(tool){ case Tools.PEN: drawPenLine(x, y); break; case Tools.BRUSH: drawBrushLine(x, y); break; } … Графический пакет позволяет пользователю изменять инструмент рисования:

Стратегия (cont.) switch(tool){ case Tools.PEN: drawPenLine(); break; case Tools.BRUSH: drawBrushLine(); break; case Tools.SPRAY: drawSpray(); break; } … Расширение возможностей пакета требует внесения изменений в класс Painter:

Стратегия (cont.) public abstract class PaintStrategy { //конструктор public PaintStrategy(String title) {…} //обобщенный способ рисовать фигуры public abstract void paint(float x[], float y[]); } Данный подход может быть обобщен. Зададим общий интерфейс для рисования всех возможных фигур:

Стратегия (cont.) public class PenPaintStrategy { //конкретный способ рисовать фигуры public void paint(float x[], float y[]){ //отображение ломаной линии, соединяющей //данные точки } Теперь реализуем класс-стратегию, обладающую возможностью рисовать линии карандашом:

Стратегия (cont.) public class BrushPaintStrategy { public void paint(float x[], float y[]){ //отображение жирной линии, соединяющей //данные точки } Теперь реализуем класс-стратегию, обладающую возможностью рисовать линии кистью:

Стратегия (cont.) public class Painter extends JComponent { PaintStrategy currentStrategy = …; … public void paint(int x[], int y[]){ currentStrategy.paint(x, y); } … Главный класс должен всего лишь передать параметры (координаты точек) текущей стратегии:

Стратегия (выводы) Позволяет сосредоточить специфическую логику в рамках одной сущности В конкретной стратегии Упрощает расширение функциональности программы Ослабляет связность компонентов

Q&A

Спасибо! Андрей Дмитриев ©