Microsoft Visual C# Конкурент языка Java для среды Microsoft .NET
Visual Basic .NET Вариант языка Visual Basic для среды Microsoft .NET
6. Роль типов данных в языках программирования. Причины появления объектно-ориентированного подхода.
Причины: усовершенствование архитектуры компьютеров, повышение мощности и аппаратной поддержки _ операционных систем.
развитие языков программирования
достижения методологии
программирования, принципов модульности и сокрытия данных
развитие теории баз данных
исследования в области искусственногоинтеллекта
достижения философии и теории познания
7. Основные положения ОО подхода.
ООР использует в качестве элементов конструкции объекты, а не алгоритмы
каждый объект является экземпляром определенного класса
Классы организованы иерархически
Поддерживаются объекты, т.е. абстракции данных, имеющие интерфейс в виде именованных операций и собственные данные, с ограничением доступа к ним
Объекты относятся к соответствующим типам (классам)
Типы (классы) могут наследовать атрибуты супертипов (суперклассов)
основывается на объектно-ориентированной декомпозиции
использует многообразие приемов представления моделей, отражающих логическую (классы и объекты) и физическую (модули и процессы) структуру системы, а также ее статические и динамические аспекты
8. Концепции ОО подхода: Абстрагирование.
выделяет существенные характеристики некоторого объекта, отличающие его от всех других видов объектов и, таким образом, четко описывает его концептуальные границы с точки зрения наблюдателя.
концентрирует внимание на внешнем представлении объекта и позволяет отделить существенные особенности поведения от их реализации (принципом минимальных обязательств – барьер абстракции).
должна полностью описывать поведение, и не порождать сюрпризы или побочные эффекты, выходящие за пределы абстракции (принцип наименьшего удивления).
Виды: сущности - объект представляет собой полезную модель некой сущности в предметной области.
Поведения - объект состоит из обобщенного множества операций.
Виртуальной машины - объект, группирующий операции, которые либо вместе используются на более высоком уровне управления, либо сами используют некоторый набор операций более низкого уровня.
Произвольная - объект включает в себя набор операций, не имеющих друг с другом ничего общего.
9. Концепции ОО подхода: Инкапсуляция.
«заключение в оболочку»
Локализация в рамках объекта всех данных, характеризующих его внутреннюю структуру и поведение.
Запрещение непосредственного доступа к тем данным, которые нецелесообразно (или даже опасно) предоставлять в распоряжение пользователя.
Доступность объекта исключительно посредством его свойств и методов.
Свойства инкапсуляции:
- совместное хранение данных и функций
- сокрытие внутренней информации от пользователя
- изоляция пользователя от особенностей реализации
Процесс разделения элементов абстракции, определяющих ее структуру и поведение.
Предназначена для изоляции контрактных обязательств абстракции от их реализации.
Абстракция и инкапсуляция дополняют друг друга.
В центре внимания абстракции находится наблюдаемое поведение объекта, а инкапсуляция сосредоточена на реализации, обеспечивающей заданное поведение.
В то время как абстракция “помогает людям думать о том, что они делают”, инкапсуляция “позволяет легко перестраивать программы”.
Для того чтобы абстракция работала, ее реализация должна быть инкапсулирована.
В C# единицей инкапсуляции является класс.
Как правило, в каждом классе наблюдается наличие двух методов. Первый для получения значений (аксессор). Второй для изменения данных (мутатор).
10. Концепции ОО подхода: Модульность
Модульность — это разделение программы на фрагменты, которые компилируются по отдельности,
но связаны между собой.
Разделение на модули до некоторой степени позволяет уменьшить ее сложность. При этом в модульной
программе возникает множество хорошо определенных и документированных интерфейсов, неоценимых для
понимания программы.
Модули служат физическими контейнерами, содержащими классы и объекты, возникающие при логическом проектировании системы.
Модульность — это свойство системы, разложенной на цельные, но слабо связанные между собой модули.
11. Концепции ОО подхода: Иерархия.
Инкапсуляция убирает из поля зрения внутренние содержание абстракций.
Модульность объединяет логически связанные абстракции в группы.
Иерархия позволяет разделить абстракции на уровни, т.е. образует из абстракций иерархическую структуру
Г.Буч: Иерархия — это ранжирование абстракций путем расположения их по уровням.
Структуры классов (отношения вида «is-а», «is-like-а»)
Структуры объектов (отношения вида «is-part-of»)
Отношения вида «is-а» реализуются с помощью наследования или генерализации:
т.е. такое отношение между классами, когда один класс заимствует, а также расширяет и/или специализирует структуру и функциональный контракт одного или нескольких родительских классов.
Иерархии “целое/часть” описывают отношения агрегации (aggregation). Агрегация есть во всех объектно-ориентированных проектах и языках программирования. Действительно, любой язык, имеющий структуры,
подобные записям, поддерживает агрегацию. В сочетании с наследованием агрегация создает мощный инструмент: она позволяет физически объединить логически связанные структуры, а наследование — без труда повторно использовать эти общие группы в разных абстракциях.
12. Концепции ОО подхода: Типизация.
Тип — это точная характеристика структуры и поведения, присущих некоторой совокупности объектов.
Типизация — это способ защититься от использования объектов одного класса вместо другого, или по крайней мере, управлять таким использованием.
Контроль типов заставляет проектировщиков выражать свои абстракции так, чтобы язык программирования, используемый для реализации системы, поддерживал принятые проектные решения.
Типизация позволяет перенести обнаружение ошибок с этапа выполнения на этап компиляции.
Центральное место в типизации занимают механизмы согласования типов (conformance).
Конкретный язык программирования может иметь сильный или слабый механизм типизации, или даже не иметь его вовсе.
У сильного контроля типов есть обратная сторона. На практике она порождает семантические зависимости, при которых небольшое изменение интерфейса в базовом классе вынуждает повторную компиляцию всех его подклассов.
Строгий (strong) и слабый (weak) контроль типов, с одной стороны, и статический (static) и динамический (dynamic) контроль типов, с другой стороны, — это разные вещи.
Строгий контроль типов означает соответствие типов (type consistency)
Статический контроль – раннее связывание (early binding), определяет момент времени на этапе компиляции, в который фиксируется тип переменных или выражений.
Динамический контроль – позднее связывание (late binding) означает, что типы переменных и выражений
до момента выполнения программы остаются неизвестными.
Наследование и динамическое связывание порождают полиморфизм (polymorphism) – одно из
наиболее мощных свойств объектно-ориентированных языков программирования, уступая по степени
важности лишь поддержке абстракции.
13. Концепции ОО подхода: Параллелизм.
Фундаментальным понятием и единицей действия в теории параллельных вычислений является поток управления. Многопоточность бывает двух видов:
тяжелая (основа – процессы операционной системы)
легкая (основа – потоки в рамках одного процесса)
В объектно-ориентированной системе, использующей принципы и средства параллелизма, потоки управления представляются активными объектами, которые являются инициаторами всех происходящих в
системе действий.
Параллелизм дает возможность объектам действовать одновременно.
Параллелизм — это свойство, отличающее активные объекты от пассивных.
Как только в систему введен параллелизм, сразу возникает вопрос о синхронизации активных объектов друг с другом и последовательными пассивными объектами.
14. Концепции ОО подхода: Персистентность.
Любой объект или данные в программной системе существуют во времени и пространстве.
Персистентность — это способность объекта преодолевать временнЫе рамки (т.е. продолжать свое существование после исчезновения своего создателя) или пространственные пределы (т.е. выходить за пределы своего первоначального адресного пространства).
Внедрение принципа сохраняемости в объектную модель привело к появлению объектно-ориентированных баз данных. Традиционные реляционные базы данных продолжают занимать лидирующее положение на
рынке систем хранения данных. Для сохранения объектов в реляционной БД могут быть использованы специальные объектно-реляционные преобразователи (ORM tools), такие как NHibernate, ADO.NET Entity Framework.
15. Объекты в ООП: Определение объекта.
Объект – идентифицируемый предмет, элемент или сущность (реальная или абстрактная), играющая четко
определенную роль в данной предметной области. Объект обладает состоянием, поведением и идентичностью.
структуру и поведение схожих объектов определяет общий для них класс.
термины "экземпляр класса" и "объект" взаимозаменяемы.
16. Объекты в ООП: Состояние.
Состояние объекта характеризуется перечнем (обычно статическим) всех свойств данного объекта и текущими (обычно динамическими) значениями каждого из этих свойств. Все объекты в системе инкапсулируют некоторое состояние, и все состояние системы инкапсулировано в объекты.
Все свойства имеют некоторые значения простые количественные характеристики ссылки на другой объект.
Тот факт, что всякий объект имеет состояние, означает, что всякий объект занимает определенное пространство.
17. Объекты в ООП: Поведение. Операции.
Объекты не существуют изолированно, а взаимодействуют друг с другом реализуя поведение.
Поведение – это действия и реакции объекта, выраженные через изменение состояния объекта и передачу сообщений. Поведение объекта – это его наблюдаемая и проверяемая извне деятельность.
Операция – это определенноевоздействие одного объекта на другой с целью вызвать соответствующую реакцию.
С# - методы.
Состояние объекта представляет суммарный результат его поведения.
Классификация методов объекта:
Конструктор – создает объект или инициализирует его.
Деструктор – освобождает состояние и/или ресурсы объекта.
Модификатор (мутатор) – изменяет состояние объекта.
Селектор (аксессор) – считывает состояние объекта, но не изменяет его.
Итератор – позволяет организовать доступ к частям объекта в строго определенной последовательности.
Роли объектов
Совокупность всех методов, относящихся к конкретному объекту, образует протокол этого объекта
Протокол определяет поведение объекта, охватывающее все его статические и динамические аспекты.
Роли выражают предназначение объекта и его место в системе.
Роль определяет контракт абстракции с её клиентом.
Ответственность понимается как совокупность всех услуг и всех контрактных обязательств объекта.
При проектировании роли уточняются с помощью операций.
18. Объекты в ООП: Уникальность (идентичность).
Идентичность - это свойство объекта, отличающее его от всех других объектов.
Но!
Смешение адресуемости и идентичности в некоторых языках программирования.
Смешение значения и идентичности в БД.
Невозможность отличить имя объекта от самого объекта – источник ошибок.
item1 – имя объекта
item2, item3 – ссылки
item4 – висячая ссылка
На один объект могут
указывать две и более
ссылки
Идентичность объекта может
быть утеряна для программы.
Без средств сборки мусора
произойдет утечка памяти
19. Объекты в ООП: Отношения между объектами.
Только в процессе взаимодействия объектов реализуется система.
Типы соотношений объектов: связи, агрегация.
Связи: это конкретное соединение, через которое объект-клиент запрашивает услугу у другого объекта-сервера и управляет им.
Передача сообщений односторонняя
Роли во взаимодействии:
Актер – активный объект: он действует, на него – нет
Сервер: на него направлено действие, а он только обслуживает запросы.
Агент (proxy): сам действует, на него тоже направлено воздействие.
Агрегация: описывает иерархию часть/целое и позволяет переходить от целого (агрегата) к его компонентам.
Агрегация не всегда физическое включение. Нужен компромисс между связью и агрегацией. Скрытие деталей при агрегации. Совместное использование при связях .Проблема коллективного управления при связях
20. Классы в ООП: Понятие класса, связь между объектами и классами.
Класс - это множество объектов, обладающих общей структурой, поведением и семантикой.
Отдельный объект является экземпляром класса.
Класс – необходимый, но недостаточный элемент декомпозиции.
Совокупность взаимодействующих классов образует компонент.
Идея контрактного программирования [Майер]:
Большие задачи разделяются на меньшие и перепоручаются субподрядчикам.
Объект является конкретной сущностью, играющей некую роль в системе.
Класс - это контракт, связывающий между собой абстракцию и её клиентов.
Выразитель обязательств класса – интерфейс. Строгий контроль типов позволяет выявлять нарушения контракта при компиляции.
Разграничение внешнего облика (интерфейса), и внутреннего устройства класса (реализации).
Интерфейс состоит из объявления операций, применимым к его объектам.
Внутреннее представление обеспечивает реализацию класса, т.е. определении операций, объявленных в интерфейсе.
Уровни доступа служат для поддержки принципа инкапсуляции.
Состояние задается через переменные. Чтоб их изменения не влияли на клиентов, они должны быть закрыты
Открытые методы класса составляют внешний контракт класса по отношению к его клиентам.
Классы не существуют изолированно.
Ключевые абстракции взаимодействуют разными способами, что требуется отразить в проекте.
Типы отношений:
«Целое/ часть" или "part of " использование.
"Общее/частное " или "is-a" наследование.
Семантические, смысловые отношения –ассоциация, агрегация, композиция.
Языки программирования выработали несколько общих подходов к выражению отношений трех типов отношений. Поддерживаются разные комбинации следующих видов отношений:
Ассоциация наследование агрегация использование инстанцирование
+ метакласс
Каждый объект является экземпляром какого-либо класса.
Класс может порождать любое число объектов.
В большинстве случаев классы статичны (то есть все их особенности и содержание определены в процессе компиляции программы)
Любой созданный объект относится к строго фиксированному классу.
Сами объекты в процессе выполнения программы создаются и уничтожаются.
На этапе анализа и ранних стадиях проектирования решаются две основные задачи:
- выявление классов и объектов, составляющих словарь предметной области
- построение структур, обеспечивающих взаимодействие объектов, при котором выполняются требования задачи
В первом случае говорят о ключевых абстракциях задачи (совокупность классов и объектов), во втором о механизмах реализации (совокупность структур).
21. Отношения между классами: Ассоциации.
обозначает наличие логической связи между классами
Ассоциация по направлению может быть: однонаправленной, двунаправленной, не иметь направления.
Концы ассоциации могут иметь имена, обозначающие роли, которые играют классы (объекты) друг для друга.
Можно выделить следующие разновидности мощности ассоциаций:
Отношение наследования означает зависимость вида «общее/частное».
Подклассы могут наследовать структуру и поведение базовых классов.
Наследование подразумевает гораздо большую сцепленность и зависимость абстракций друг от друга, нежели ассоциация или использование.
Множественное наследование не рассматриваем. От него больше проблем, чем пользы.
23. Отношения между классами: Полиморфизм.
Полиморфизм является следствием наследования и динамического связывания.
Программный код называется полиморфным, если он позволяет обрабатывать данные различных типов с
учетом их особенностей.
Точный вариант метода определяется только на этапе выполнения с учетом реального типа объекта с
помощью динамического связывания.
Полиморфизм наиболее полезен в тех случаях, когда несколько классов имеют один и тот же протокол.
Полиморфизм позволяет обойтись без операторов многовариантного выбора, поскольку каждый объект неявно знает свой тип.
24. Отношения между классами: Использование.
Отношение использования означает, что одна абстракция зависит от функционального интерфейса (контракта) другой абстракции.
При изменении контракта одного класса или интерфейса необходимо вносить изменения в код класса, который от него зависит.
25. Определение классов и объектов. Подходы к классификации.
Определение классов и объектов – одна из самых сложных задач ООП
Классификация:
содержит элементы открытия и изобретения, ставит целью – нахождение общих свойств объектов , объединеняет в одну группу объекты, имеющие одинаковое строение или одинаковое поведение определяет иерархии обобщения, специализации и агрегации, помогает правильно определить модульную структуру.
За основу берется какая-то определенная структура классов, которую постепенно совершенствуют.
Только на поздней стадии разработки можно критически оценить качество получившейся классификации.
Основываясь на полученном опыте, мы можем:
создать новый подкласс из уже существующих (вывод)
разделить большой класс на много маленьких (факторизация)
слить несколько существующих в один (композиция)
определить новые классы, если будут найдены новые общие , ранее не замеченные свойства (абстракция)
Подходы к классификации: -Классическая категоризация
-Концептуальная кластеризация
-Теория прототипов
Классическая категоризация
Критерий похожести объектов – родственность их свойств
Объекты разбивают на непересекающиеся множества в зависимости от наличия или отсутствия некоторого признака
Лучшими являются такие наборы свойств, элементы которых мало взаимодействуют между собой
Свойства не обязательно должны быть измеряемыми, в качестве их можно использовать наблюдаемое поведение.
Концептуальная кластеризация
Сначала формируются концептуальные описания классов (кластеров объектов), а затем сущности классифицируются в соответствии с этими описаниями
Концептуальную кластеризацию связана с теорией нечетких (многозначных) множеств, в которой объект может принадлежать к нескольким категориям одновременно с разной степенью точности
Концептуальная кластеризация делает в классификации абсолютные суждения, основываясь на наилучшем согласии.
Теория прототипов
Класс определяется одним объектом-прототипом, и новый объект можно отнести к классу при условии, что он наделен существенным сходством с прототипом
Свойства, определяемые при взаимодействии с объектом (свойства взаимодействия), являются главными при определении семейного сходства.
26. Объектно-ориентированный анализ.
27. Обзор .NET Framework. Common Language Runtime (основные задачи), Framework Class Library.
28. Обзор .NET Framework. Common Language Specification. Microsoft Intermediate Language. Метаданные.
29. Управляемый код (процесс исполнения), управляемые данные, преимущества управляемого кода.
30. Взаимосвязь ООП и .NET Framework.
31. Сборки. Атрибуты. Отражение.
32. Система типов. Пространства имен. Оператор using.
33. Типы и их экземпляры: классы и структуры.
34. Типы и их экземпляры: интерфейсы, перечисления, делегаты.
35. Члены типов и доступ к ним.
36. Виды программ. Компиляция разных видов программ.
54. Работа с управляемой памятью. Модель освобождения ресурсов. Механизм работы сборщика мусора. Поколения.
55. Доступ к данным в ADO.NET. Отсоединенные компоненты. Присоединенные компоненты.
56. Паттерны проектирования. Назначение и описание.
Практическое задание состаавлено на основе работы №15 с созданием оконного приложения, содержащего стандартные элементы управления: TextBox (текстовое окно), Button (кнопка), ComboBox (комбинированные списки) и т.п.