57
Программная Программная инженерия инженерия Зарецкий Дмитрий Зарецкий Дмитрий Викторович Викторович Email: dmitryzar @ stbpwr . com

Программная инженерия

  • Upload
    vondra

  • View
    52

  • Download
    0

Embed Size (px)

DESCRIPTION

Программная инженерия. Зарецкий Дмитрий Викторович. Email : dmitryzar @ stbpwr . com. Программа курса. Программное обеспечение: природа и качество. Классификация ПО. Требования и показательные качества ПО. Виды систем. Принципы инженерии ПО. - PowerPoint PPT Presentation

Citation preview

Page 1: Программная инженерия

Программная Программная инженерияинженерия

Зарецкий Дмитрий ВикторовичЗарецкий Дмитрий Викторович

Email: [email protected]

Page 2: Программная инженерия

Программа курсаПрограмма курса

Программное обеспечение: природа и Программное обеспечение: природа и качество. Классификация ПО. качество. Классификация ПО. Требования и показательные качества Требования и показательные качества ПО. Виды систем. Принципы инженерии ПО. Виды систем. Принципы инженерии ПО.ПО.

Основные понятия объектно-Основные понятия объектно-ориентированного программирования.ориентированного программирования.Объекты, сообщения, интерфейсы, Объекты, сообщения, интерфейсы, классы, полиморфизм.классы, полиморфизм.

Page 3: Программная инженерия

Обзор языков, платформ, технологий и Обзор языков, платформ, технологий и средств разработки.средств разработки. . .NET Framework NET Framework и и JJ22EE EE – сравнительный анализ. Основы– сравнительный анализ. Основы CORBA, DCOM, EJB, .NET Remoting. CORBA, DCOM, EJB, .NET Remoting. Реляционные и объектно-ориентированные Реляционные и объектно-ориентированные базы данных. Интернет приложения, веб базы данных. Интернет приложения, веб сервисы. Средства управления исходным сервисы. Средства управления исходным кодом (кодом (CVSCVS, , SubversionSubversion, , SourceSafeSourceSafe))

Стратегии распределенных вычислений.Стратегии распределенных вычислений. Связи. Процессы. Синхронизация. Связи. Процессы. Синхронизация. Репликация. Отказоустойчивость. Репликация. Отказоустойчивость. Распределенные системы объектов, файлов, Распределенные системы объектов, файлов, документов. Распределенные системы документов. Распределенные системы согласования. согласования.

Page 4: Программная инженерия

Проектирование, спецификация.Проектирование, спецификация. Составление Составление технических заданий. Методы сбора информации. технических заданий. Методы сбора информации. UMLUML. . Use case Use case диаграммы. Диаграммы классов, диаграммы. Диаграммы классов, объектов, компонентов, состояний, объектов, компонентов, состояний, последовательностей, действий. последовательностей, действий. ORMORM. . CASE CASE инструменты. Спецификации асинхронных систем. инструменты. Спецификации асинхронных систем. Логические, алгебраические спецификации. Логические, алгебраические спецификации. Концептуальный, логический и физический дизайн. Концептуальный, логический и физический дизайн. Прототипирование. Паттерны проектирования. Прототипирование. Паттерны проектирования.

Процесс разработки программного обеспечения. Процесс разработки программного обеспечения. Структура проектной группы. Стадии проекта. Структура проектной группы. Стадии проекта. Нотации оформления кода. Нотации оформления кода. ccамодокументированность кода. Рефакторинг. амодокументированность кода. Рефакторинг. Экстремальное программирование. Безопасность Экстремальное программирование. Безопасность кода. Принципы построения кода. Принципы построения GUIGUI. Ведение . Ведение параллельных версий. Компиляция и отладка ПО. параллельных версий. Компиляция и отладка ПО. Оптимизация.Оптимизация.

Page 5: Программная инженерия

Тестирование.Тестирование. Верификация. Методы Верификация. Методы тестирования (методы “черного и белого тестирования (методы “черного и белого ящика”) Планы тестирования проекта, ящика”) Планы тестирования проекта, компонентов. Модели анализа. компонентов. Модели анализа. Автоматизированные регрессивные тесты. Автоматизированные регрессивные тесты. Тестирование классов и иерархий классов. Тестирование классов и иерархий классов. Тестирование распределенных объектов. Тестирование распределенных объектов. Тестирование интернет приложений. Тестирование интернет приложений.

Внедрение продукта.Внедрение продукта. Разработка Разработка пользовательской документации. Создание пользовательской документации. Создание программы установки. Обучение программы установки. Обучение пользователей, поддержка ПО. Повторное пользователей, поддержка ПО. Повторное использование и переносимость ПО, использование и переносимость ПО, реинженерия.реинженерия.

Page 6: Программная инженерия

Управление.Управление.

Планирование проекта. Анализ рисков. Оценка Планирование проекта. Анализ рисков. Оценка затрат. Внутренняя проектная документация. затрат. Внутренняя проектная документация. Командная работа, распределение ролей и Командная работа, распределение ролей и ответственности (централизованный, ответственности (централизованный, децентрализованный и смешанный тип управления). децентрализованный и смешанный тип управления). Диаграммы Ганта. Графики Диаграммы Ганта. Графики PERTPERT. Контроль . Контроль качества. Анализ текущего состояния проекта. качества. Анализ текущего состояния проекта. Стабильность/нестабильность проекта, построение Стабильность/нестабильность проекта, построение графиков интенсивности возникновения и устранения графиков интенсивности возникновения и устранения ошибок. Средства поддержки управления проектом. ошибок. Средства поддержки управления проектом. Модель развития функциональных возможностей Модель развития функциональных возможностей CMM.CMM.

Page 7: Программная инженерия

ЛитератураЛитература Мартин Фаулер Архитектура корпоративных программых Мартин Фаулер Архитектура корпоративных программых

приложений. Москва. Изд. Вильямс 2004.приложений. Москва. Изд. Вильямс 2004. Карло Гецци, Мехди Джазайери, Дино Мандриоли. Основы Карло Гецци, Мехди Джазайери, Дино Мандриоли. Основы

инженерии программного обеспечения. Санкт-Петербург БХВ инженерии программного обеспечения. Санкт-Петербург БХВ 2005.2005.

Э. Таненбаум, М. ван Стеен. Распределенные системы. Э. Таненбаум, М. ван Стеен. Распределенные системы. Принципы и парадигмы. Изд. Питер 2004.Принципы и парадигмы. Изд. Питер 2004.

Джон Макгрегор, Девид Сайкс Тестирование объектно-Джон Макгрегор, Девид Сайкс Тестирование объектно-ориентированного программного обеспечения. 2ориентированного программного обеспечения. 2002002

BeckBeck. . TestTest--Driven DevelopmentDriven Development: : By ExampleBy Example. . Addison-Wisley, Addison-Wisley, 2003.2003.

Эд Салливан. Время-деньги. Эд Салливан. Время-деньги. Microsoft PressMicrosoft Press, Русская , Русская редакция. Москва 2002.редакция. Москва 2002.

Бек, К. Экстремальное программирование. Библиотека Бек, К. Экстремальное программирование. Библиотека программиста. СПб.: Питер, 2002.программиста. СПб.: Питер, 2002.

Page 8: Программная инженерия

Microsoft Solution Framework White Paper June Microsoft Solution Framework White Paper June 2002, 2002, http://www.microsoft.com/http://www.microsoft.com/msfmsf//

Object Management Group’s Unified Modeling Object Management Group’s Unified Modeling Language Language http://www.omg.org/uml/http://www.omg.org/uml/

Русскоязычный сайт программистов Русскоязычный сайт программистов http://www.rsdn.ruhttp://www.rsdn.ru

Сайт посвященный вопросам Сайт посвященный вопросам программирования под программирования под .NET .NET http://www.gotdotnet.ruhttp://www.gotdotnet.ru

СсылкиСсылки

Page 9: Программная инженерия

Жизненный цикл программного Жизненный цикл программного обеспечения.обеспечения.

Envisioning. Envisioning. Анализ и спецификация Анализ и спецификация требований.требований.

Planning. Planning. Проектирование.Проектирование. Developing. Developing. Кодирование.Кодирование. Stabilizing. Stabilizing. Тестирование.Тестирование. Deploying. Deploying. Сборка. Поставка и Сборка. Поставка и

эксплуатация.эксплуатация.

Page 10: Программная инженерия

Качества программного Качества программного обеспеченияобеспечения

Внутренние и внешние качества, связь Внутренние и внешние качества, связь между ними.между ними.

Оценка продукта.Оценка продукта. Оценка процесса создания ПО. Оценка процесса создания ПО.

Page 11: Программная инженерия

Корректность (Корректность (correctnesscorrectness) – соответствие ) – соответствие требованиям функциональной спецификациитребованиям функциональной спецификации

НадежностьНадежность (reliability) (reliability) – вероятность того, – вероятность того, что программное обеспечение будет что программное обеспечение будет работать как ожидалось в течении работать как ожидалось в течении определенного интервала времени.определенного интервала времени.

Корректность

Надежность

УстойчивостьУстойчивость(stability)(stability) – правильное поведение – правильное поведение программы даже в обстоятельствах не программы даже в обстоятельствах не предусмотренных в спецификациипредусмотренных в спецификации

Page 12: Программная инженерия

ПроизводительностьПроизводительность (productivity) (productivity).. Эффективность (Эффективность (performanceperformance).).

1.1. ИзмерениеИзмерение

2.2. АнализАнализ

3.3. Имитационное моделирование.Имитационное моделирование.

Подходы к расчету производительности системы:

Удобство. Дружественный интерфейс.Удобство. Дружественный интерфейс. Верифицируемость.Верифицируемость.

Page 13: Программная инженерия

Рассмотреть влияние Рассмотреть влияние пользовательского интерфейса (пользовательского интерфейса (GUIGUI) на ) на надежность.надежность.

Page 14: Программная инженерия

СопровождаемостьСопровождаемость

Корректирующее – устранение ошибок.Корректирующее – устранение ошибок. Настраивающее – адаптация приложения к Настраивающее – адаптация приложения к

изменениям среды.изменениям среды. Усовершенствующее – изменение ПО с Усовершенствующее – изменение ПО с

целью улучшения некоторых из его качествцелью улучшения некоторых из его качеств

В среднем затраты на сопровождение превышают 60% от общей стоимости программного обеспечения.

Категории сопровождения

Проблема унаследованного ПО. Необходимость проведение обратного инжиниринга и реинженеринга.

Page 15: Программная инженерия

Ремонтопригодность (Ремонтопригодность (repairabilityrepairability) – ) – возможность устранения дефектов возможность устранения дефектов приемлемыми усилиями.приемлемыми усилиями.

Способность к эволюции.Способность к эволюции. Повторная применимость.Повторная применимость. Переносимость (Переносимость (portabilityportability) – возможность ) – возможность

работать в различных системах. работать в различных системах. Понятность.Понятность. Интероперабельность (Интероперабельность (interoperabilityinteroperability) – ) –

возможность ПО сотрудничать с другими возможность ПО сотрудничать с другими системами.системами.

Продуктивность.Продуктивность.

Page 16: Программная инженерия

Как повторная применимость может влиять Как повторная применимость может влиять на надежность продуктов?на надежность продуктов?

Как можно использовать наследование для Как можно использовать наследование для увеличения повторной применимости?увеличения повторной применимости?

Какова связь повторной применимости и Какова связь повторной применимости и переносимости?переносимости?

Как можно применить переносимость для Как можно применить переносимость для webweb страниц?страниц?

Что можно сказать о способности к эволюции Что можно сказать о способности к эволюции открытых систем?открытых систем?

Можно ли использовать подсчет количества Можно ли использовать подсчет количества строк для измерения продуктивности.строк для измерения продуктивности.

Page 17: Программная инженерия

Своевременность ПОСвоевременность ПО

Наиболее часто встречающиеся проблемы в разработке ПО.

Реальные возможности системы

Требования пользователя

T0 T1 T2 T3

Функциональность

Page 18: Программная инженерия

Классификация ПО.Классификация ПО.

Информационные системы. Информационные системы. Хранение, Хранение, поиск, извлечение данных.поиск, извлечение данных.

Системы реального времени. Системы реального времени. Должны Должны реагировать на событие в течении строго реагировать на событие в течении строго предопределенного периода времени.предопределенного периода времени.

Распределенные системы.Распределенные системы. Располагаются Располагаются на нескольких независимых или частично на нескольких независимых или частично независимых компьютерах.независимых компьютерах.

Встроенные системы. Встроенные системы. ПО является одним из ПО является одним из множества компонентов, часто не имеют множества компонентов, часто не имеют GUI.GUI.

Page 19: Программная инженерия

Охарактеризуйте такие качества как Охарактеризуйте такие качества как тестируемость, целостность, легкость в тестируемость, целостность, легкость в использовании, изучаемость. Приведите использовании, изучаемость. Приведите примеры.примеры.

Оценить преимущества и недостатки Оценить преимущества и недостатки повторной используемости методов в повторной используемости методов в применении к программному процессу.применении к программному процессу.

Какова роль протоколов Какова роль протоколов TCP/IPTCP/IP в в интероперабельности?интероперабельности?

Можно ли оценивать процесс создания ПО с Можно ли оценивать процесс создания ПО с точки зрения интероперабельности?точки зрения интероперабельности?

Page 20: Программная инженерия

Принципы создания ПО.Принципы создания ПО.

Принципы

Методы и приемы

Методологии

Инструментальные средства

Page 21: Программная инженерия

Строгость и формальность.Строгость и формальность. Разделение задач. Преимущества и Разделение задач. Преимущества и

недостатки (избыточность, недостатки (избыточность, взаимоблокировки).взаимоблокировки).

Модульность. Проектирование снизу Модульность. Проектирование снизу вверх и сверху вниз.вверх и сверху вниз.

Page 22: Программная инженерия

Преимущества модульностиПреимущества модульности

Разложимость – возможность разложить систему на простые части.

Компонуемость – возможность собрать систему из готовых модулей.

Возможность интерпретировать систему как состоящую из простых частей.

Возможность модифицировать систему путем модификации небольшого количества частей.

Page 23: Программная инженерия

Внутримодульная и Внутримодульная и межмодульная связность.межмодульная связность.

А Б

Page 24: Программная инженерия

Какие могут быть причины низкой Какие могут быть причины низкой внутримодульной связности? Как их внутримодульной связности? Как их устранить?устранить?

Какие могут быть причины высокой Какие могут быть причины высокой межмодульной связности? Как их межмодульной связности? Как их устранить?устранить?

Page 25: Программная инженерия

АбстракцияАбстракция

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

Модель жизненного цикла ПО является абстракцией Модель жизненного цикла ПО является абстракцией программного процесса. Почему?программного процесса. Почему?

Какие абстракции полезны конечному пользователю, Какие абстракции полезны конечному пользователю, проектировщику и специалисту по поддержке проектировщику и специалисту по поддержке приложений?приложений?

Выделяем существенные аспекты явления и игнорируем его подробности.

Page 26: Программная инженерия

Предусмотрение изменений. Принцип Предусмотрение изменений. Принцип позднего связывания.позднего связывания.

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

Инкрементность. Итерационный Инкрементность. Итерационный процесс разработки. Способ получения процесс разработки. Способ получения раннего отклика от клиента.раннего отклика от клиента.

Page 27: Программная инженерия

Какое взаимоотношение между Какое взаимоотношение между обобщением и предусмотрением обобщением и предусмотрением изменений?изменений?

Какое взаимоотношение между Какое взаимоотношение между общностью и абстракцией?общностью и абстракцией?

Какое взаимоотношение между Какое взаимоотношение между формальностью и предусмотрением формальностью и предусмотрением изменений?изменений?

Page 28: Программная инженерия

Парадигмы программированияПарадигмы программирования

Будем говорить, что язык поддерживает Будем говорить, что язык поддерживает данный стиль программирования, если он данный стиль программирования, если он предоставляет средства, которые делают предоставляет средства, которые делают использование стиля удобным (достаточно использование стиля удобным (достаточно простым, надежным и эффективным)простым, надежным и эффективным)

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

Page 29: Программная инженерия

ЛитератураЛитература

Бьерн Страуструп Язык Бьерн Страуструп Язык программирования С++. Москва. программирования С++. Москва. Binom Binom 20002000..

Джеффри Рихтер Программирование Джеффри Рихтер Программирование на платформе на платформе .NET Framework.NET Framework..

Брюс Эккель Философия Брюс Эккель Философия JAVAJAVA.. СПб. СПб. Питер, 200Питер, 20000..

Page 30: Программная инженерия

Процедурное программированиеПроцедурное программирование

Реши, какие требуются процедуры; используй наилучшие доступные алгоритмы.

Пример.

double sqrt(double arg){

//text}

void f(){

double root2 = sqrt(2);}

Page 31: Программная инженерия

Модульное программированиеМодульное программирование

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

Пример. Реализовать стек, удовлетворяющий следующим требованиям:1. Предоставить пользовательский интерфейс для

стека (например, функции push() и pop(), помещающий данные в стек и извлекающий их оттуда)

2. Гарантировать, что представление стека доступно только через этот пользовательский интерфейс.

3. Обеспечить инициализацию стека до первого использования.

Page 32: Программная инженерия

namespace Stack { //интерфейсvoid push(char);char pop();

}void f(){

Stack::push(‘c’);if(Stack::pop()!=‘c’) error (“Такое

невозможно”);}namespace Stack{ //реализация

const int max_size = 200;char v[max_size];int top = 0;

void push(char c){/*Поместить в стек.*/}char pop() {/*Извлечь из стека.*/}

}

Page 33: Программная инженерия

Интерфейс стека

#include “stack.h”Использование стека

#include “stack.h”Использование стека

stack.h

user.cppstack.cpp

Раздельная компиляцияРаздельная компиляция

Page 34: Программная инженерия

Модули, определяющие типы

namespace Stack {struct Rep;typedef Rep& stack;

stack create();void destroy(stack s);

void push(stack s, char с);char pop(stack s);

}

void f(){

Stack::stack s1 = Stack::create(); //Создать новый стекStack::stack s2 = Stack::create(); //и еще один

Page 35: Программная инженерия

Stack::push(s1,’c’);Stack::push(s2,’k’);

If(Stack::pop(s1)!=‘c’) throw BadPop();If(Stack::pop(s2)!=‘k’) throw BadPop();

Stack::destroy(s1);Stack::destroy(s2);

}namespace Stack{

struct Rep{char v[max_size];int top;

};const int max = 16;Rep stacks[max];…

}

Page 36: Программная инженерия

Объектно-ориентированное Объектно-ориентированное программированиепрограммирование

Реши, какие требуются классы; обеспечь полный набор операций для каждого класса; явно вырази общность через наследование.

Инкапсуляция – объединение в единое целое Инкапсуляция – объединение в единое целое данных и алгоритмов обработки этих данных.данных и алгоритмов обработки этих данных.

Наследование – свойство объектов порождать Наследование – свойство объектов порождать своих потомков.своих потомков.

Полиморфизм – свойство родственных Полиморфизм – свойство родственных объектов (имеющих общего родителя) решать объектов (имеющих общего родителя) решать схожие по смыслу проблемы разными схожие по смыслу проблемы разными способами.способами.

Page 37: Программная инженерия

Классический пример для случая отображения различных фигур:

Figures

Shape

Circle Polygon

А. Диаграмма классов.

В. Объединение классов в единый пакет.

#move()#rotate(in angle : int)#draw()

Shape

-radius

Circle

+AddRib()

-ribCount

Polygon

Page 38: Программная инженерия

Пример создания общих методов для всех наследников:

Определение наследников

void rotate(Shape s, int angle){

s.rotate(angle);s.draw();

}

Circle c = new Circle();Polygon p = new Polygon();rotate(c,60);rotate(p,40);

class Circle extends Shape {…} // java

class Circle: Shape {…} // C#

Page 39: Программная инженерия

Можно ли при создании класса Можно ли при создании класса Circle Circle воспользоваться реализацией из воспользоваться реализацией из класса класса Shape Shape не применяя не применяя наследование? Если возможно, то как?наследование? Если возможно, то как?

Всегда ли использование наследования Всегда ли использование наследования несет только преимущества?несет только преимущества?

Приведите примеры возможного Приведите примеры возможного использования наследования.использования наследования.

Page 40: Программная инженерия

+GetName()+GetAge()+Hire()

-FirstName-LastName-Address-Phone-BirthDate

Employee

+EditProductData()

ProductClerk

+Approves discount between 15% to 20%()+Applies discounts up to 20%()+Creates Orders()

SalesManager

+Create()+Delete()+Update()

Party

+AddContact()+UpdateContact()+DeleteContact()

-Name-Address-Phone-PrimaryContact

Organization

+GetAddressList()+AddAddress()+ValidateSignature()

-AccountNumber-Name-Organization-UserID-Password

Customer

+Applies 15% discount()+Request up to 20% discount()+Creates Orders()+Takes Phone Orders()

SalesRepresentative

Более сложный пример использования наследования.

Page 41: Программная инженерия

Множественное наследованиеМножественное наследованиеВ отличии от C++ для Java и .NET множественное наследование от обычных классов не поддерживается. Оно заменяется на одиночное наследование от обычного класса и множественное от интерфейсов.

-addToLog()-checkUser()

ApplicationServer

MarshalByRefObject

+GetServerName() : string+GetSession(in login : string, in password : string) : ISession

«interface»IApplicationServer

+GetRegistry()+GetObject()+UpdateObject()

«interface»ISession

Реfлизация серверного класса в NET Remoting.

Page 42: Программная инженерия

Модификаторы доступаМодификаторы доступа

Private – Private – доступен только методам в доступен только методам в определяющем типе и вложенных в него определяющем типе и вложенных в него типах.типах.

Protected – Protected – доступен только методам в этом доступен только методам в этом типе или одном из производных типов.типе или одном из производных типов.

Public – Public – доступен всем методам.доступен всем методам.

Нестандартные модификаторы доступа и атрибуты в разных языках: internal, friend, abstract, sealed, final, readonly

Атрибут static (Shared) – означает, что поле частично определяет состояние типа, а не объекта.

Page 43: Программная инженерия

Члены классаЧлены класса Константа – идентификатор, определяющий Константа – идентификатор, определяющий

некую постоянную величину.некую постоянную величину.

public const Int32 MaxEntiriesInList = 50;

Поле – неизменяемое или изменяемое Поле – неизменяемое или изменяемое значение, определяющее состояние типа или значение, определяющее состояние типа или объекта (статическое или нестатическое)объекта (статическое или нестатическое)

public static readonly Random = new Random();static Int32 numberOfWrites = 0;public readonly String pathName =“Untitled”;public FileStream fs;

Page 44: Программная инженерия

Конструктор экземпляра – метод, Конструктор экземпляра – метод, используемый для установки в корректное используемый для установки в корректное начальное состояние экземпляров полей начальное состояние экземпляров полей нового объекта.нового объекта.

class SomeType{Int32 x;String s;public SomeType(){/* Общая часть */}public SomeType(Int32 x):this(){

this.x = x;}public SomeType(String s):this(){

this.s = s;}

}

Page 45: Программная инженерия

Конструктор типа (статический конструктор, Конструктор типа (статический конструктор, конструктор класса, инициализатор типа) – конструктор класса, инициализатор типа) – метод, используемый для установки в метод, используемый для установки в корректное начальное состояние статических корректное начальное состояние статических полей типа.полей типа.

class SomeType {static Int32 x = 5;

static SomeType() {x = 10;

}}

Чему будет равна переменнная x после обращения к классу SomeType?

Page 46: Программная инженерия

Метод – функция, выполняющая операции, Метод – функция, выполняющая операции, которые изменяют или опрашивают которые изменяют или опрашивают состояние типа(статический метод) или состояние типа(статический метод) или объекта (экземплярный метод).объекта (экземплярный метод).

public static Boolean ReferenceEquals(Object, objAObject objB)static void SetVal(out Int32 v) {…}void AddVal(ref Int32 v) {…}static Int32 Add(params Int32[] values) {…}

Перегрузка оператора – метод, Перегрузка оператора – метод, определяющий, что нужно проделать с определяющий, что нужно проделать с объектом, при применении к нему оператора.объектом, при применении к нему оператора.

Class Complex { public static Complex operator+(Complex c1, Complex c2) {…}}

Page 47: Программная инженерия

Оператор преобразования – метод, Оператор преобразования – метод, определяющий как неявноопределяющий как неявно//явно привести явно привести объект из одного типа в другой.объект из одного типа в другой.

Class Rational {public Rational(Int32 numerator) {…}public Rational(Single value) {…}public Int32 ToInt32() {…}public Single ToSingle() {…}

//Неявно создает Rational из Int32 и Singlepublic static implicit operator Rational(Int32 numerator) {

return new Rational(numerator);}public static implicit operator Rational(Single value) {

return new Rational(value);}

Page 48: Программная инженерия

//Явно возвращает объет типа Int32, полученный из Rationalpublic static explicit operator Int32(Rational r) {

return r.ToInt32();}

//Явно возвращает объет типа Single, полученный из Rationalpublic static explicit operator Single(Rational r) {

return r.ToSingle();}

}

Rational r1 = 5; //Неявное приведение Int32 к RationalRational r2 = 1.202e18; //Неявное приведение Single к Rational

Int32 x = (Int32) r1; //Явное приведение Rational к Int32Single s = (Single) r1; //Явное приведение Rational к Single

Пример использования:

Page 49: Программная инженерия

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

public class Employee {

private String _Name;private Int32 _Age;

//Ключевое слово value идентифицирует //новое значениеpublic String Name {

get { return _Name; }set { _Name = value; }

}

Page 50: Программная инженерия

public Int32 Age {get { return _Age; }set {

if (value < 0)throw new OutOfRageException();

_Age = value;}

}}

Page 51: Программная инженерия

Событие (статическое, экземплярное) – Событие (статическое, экземплярное) – механизм, который позволяет типумеханизм, который позволяет типу//объекту объекту посылать уведомление слушающему посылать уведомление слушающему типутипу//объекту.объекту.

public delegate void DataChangedDelegate (EventValueChanged val);

public event DataChangedDelegate DataChanged;

if(DataChanged !=null ) DataChanged(null); //вызов((IForm)_tableForm).DataChanged +=

new DataChangedDelegate(ControlConstructorListForm_DataChanged);

Объявление события в C#

JTextField name = new JTextField(25);Class NameL implements ActionListner {…}name.addActionListner(new NameL());

Пример подписки на события компонетов Swing (java)

Page 52: Программная инженерия

ИсключенияИсключения Компактное размещение кода, выполняющего Компактное размещение кода, выполняющего

очистку, и его гарантированное исполнение.очистку, и его гарантированное исполнение. Централизованное хранение кода, имеющего Централизованное хранение кода, имеющего

дело с исключительными ситуациями.дело с исключительными ситуациями. Облегчение поиска и исправления ошибок в Облегчение поиска и исправления ошибок в

коде.коде.

Следует отметить, что при разработке API Win32 и COM Microsoft отказались от использования исключений для уведомления вызывающего кода о сбоях.Вопрос: Какая методика используется в API Win32 и COM?

Page 53: Программная инженерия

void SomeMethod() {try {}catch (InvalidCastException) {}catch (NullReferenceException) {}catch (Exception e) {

throw;}catch {

throw;}finally {}

}

Page 54: Программная инженерия

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

Шаблоны в C++

template<class T> class Stack {T * v;int max_size;int top;

public:Stack (int s);~Stack();void push(T);T pop ();

}

Page 55: Программная инженерия

template<class T> void Stack<T>::push(T c){

if (top == max_size) throw Overflow ();v[top] = c;top ++;

}

Префикс template<class T> делает T параметром объявления, которому этот префикс предшествует.Функции-члены можно определить следующим образом:

Stack<char> sc (200);Stack<complex> scplx(30);

sc.push(‘c’);Scplx.push (complex(1,2));

Использование стека:

Page 56: Программная инженерия

Generic в C# 2.0

List<int> items = new List<int> ();items.Add(1);items.Add(2);

items[1]++;int I = items[1];

//Объявлениеclass List<ItemType> {…}

Page 57: Программная инженерия

Generic в java 1.5

List<String> items = new ArrayList<String> ();items.Add(“some text”);

String str = items.get(0);

//Объявлениеclass GenericList<E> {…}

Последовательности и связные списки