Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Материал по ооп.docx
Скачиваний:
3
Добавлен:
04.08.2019
Размер:
102.94 Кб
Скачать
  1. Система типов cts

CTS (common type system) общая система типов

Функции:

  • Описывает типы данных и операции

  • Совместимость типов в разных ЯП

  • Имеет объектно – ориентированную направленность

Категории данных:

  • Значимые типы

  • Ссылочные типы

Управление типами в CTS:

  • Типы могут быть исполнены после инициализации

  • Над типами 2 рода преобр-й (явные/неявные)

  • Типы объединяются в совокупности (пространство имён, файлы, сборки)

  • Ссылочные типы

  • Типы значения

Упаковка(boxing)- приведения значимого типа к ссылочному

Обнуляемые типы:

  • Поддержка null – значений для значимых типов

  • Стандартизация подхода к задаче

  • Работа только с value Type типами

Чтобы определить переменную, которая может принимать ещё и null значение

  1. Преобразования типов

Явные(explicit):

  • Когда преобразование к другому типу напрямую несовместимо

  • Требуют вызова, могут приводить к потере точности

  • Checked-проверка

  • long- int, ...

Неявные(implicit):

  • Когда безопасно

  • Автоматически, всегда успешно

  • int- long, float- double, long- float

Оператор перечисления:

  • Список поименованных констант

  • Описываются словом enum

  • Встроено представляется типом INT? Но может быть и другим типом

  • Сильно типизирован

Тип System.Object базовый класс для всех типов .net , при описании типа по умолчанию наследник System.Object

Важные методы:

  • equals()- сравн. объекты

  • ToString()- предст. объекта как строки

  • GetHashCode()- выч. хеш-кода

  • Finalize()- уничтожение

  • GetType()- возвращение метаданных

  • MemberwiseClone()- кодирует бинарные представления в новую переменную

  • ReferenceEquals()- сравн. 2 объекта по ссылке

Клонирование объектов:

  • Создаёт идентичные копии

  • Копируется значение всех полей

  • Типы, которые позволяют клонирование

  • Clone() копирует рекурсивно все поля

Упаковка значимых типов (преобразование значимых типов в ссылочные и наоборот) Boxing-UnBoxing.

  1. Пространства имен и пакеты

Пространство имён:

  • Много общего с пространством имен в с++ и пакетами в java

  • Выполняют логическую группировку

  • Могут содержать в себе классы, структуры, интерфейсы и др. пространства имен

  • не могут содержать методов и данных

  • Позв. описывать типы с одинаковыми именами (в различных пространствах)

  • Могут располагать в одном или нескольких различных файлов

  • Используются через директиву using

  • можно и без using, но с полным именем

Пространства имен (namespace) и ссылки

  • Для проекта могут быть указаны ссылки

  • Каждая ссылка идентифицирует универсальную сборку

  • Передается c# компилятору по ссылке

  • пространства имён дают возможность сохранять именования на уровне ЯП

  • ссылки указывают на сборку для использования в проекте

  1. Наследование в ооп

Принцип наследования в ооп позволяет создать класс, включающий в себя все данные и методы некоторого другого класса, и, кроме того, содержащий свои, присущие только ему данные и методы обработки. Такой подход позволяет строить целые иерархии классов, каждый следующий уровень которых отличается все большей детализацией по сравнению с предшествующими ему уровнями. Достоинства такого подхода наиболее полно проявляются при программировании достаточно сложных объектов, к которым по праву относится сама операционная система Windows.

Наследование позволяет описать сначала общий класс окна Windows, на его основе описать общий класс диалогового окна Windows, а уже на основе этого класса сформировать класс конкретного диалогового окна, используемого для реализации конкретного пользовательского интерфейса.

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

Описания в виде фреймов и диаграмм

Свойства отношения частного порядка:

  • рефлексивность

любой a: a is A a

  • транзитивность

любые a, b, c : a is A b, b is A с => a is A с

  • антисимметричность

любые a, b : a is A b => NOT (b is A a)

Наследование

  1. основная концепция ООП

  2. в C# классы и стр. могут наследовать

  3. наследуют все члены – поля, методы, свойства…

  4. класс родитель называют базовый класс

  5. класс наследник – дочерний

  6. наследование позволяет установить иерархию типов

в .NET множественное наследование основано на интерфейсах

  1. Реализация наследования в C#

интерфейсы:

  • описывают совокупность методов и свойств

  • описывается только прототип метода

  • могут использоваться для описания абстрактных типов данных

  • элементы interface не должны быть статическими

  • классы и структуры могут реализовывать множественные интерфейсы

  • интерфейс может расширять другой интерфейс

абстрактные классы и методы:

  • реализуют концепцию полиморфизма

  • абстрактные методы не имеют реализации

  • абстрактные методы неявно являются виртуальными

  • если класс имеет абс. методы, то его нужно описывать как абстракцию

  • запрещено создавать объекты абст-х классов

Явная реализация интерфейсов:

  • интерфейс может быть имплементирован явно

  • можно реализовывать несколько интерфейсов, которые содержат методы с одинаковой структурой

  • когда член интерфейса имплементирован явно он становится недоступным через сущность класса, но доступен через интерфейс

  • в .net позволено в одном классе иметь 2 метода с одинаковой сигнатурой с единой явной имплементацией интерфейса

Требования к реализации интерфейсов:

  • классы наследуют свойство 1 базового класса, но могут реализовать несколько интерфейсов

  • структура может наследовать свойства любого типа и при этом реализовать множественные интерфейсы

  • любой элемент интерфейса может реализовать свойство класса

  • реализованные методы интерфейса нельзя описывать как override а можно как virtual либо abstract.

Классовые диаграммы:

  • представляют стандарт UML нотацию для изображения классовой иерархии

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

  • классы изображают прямоугольниками в которых заключены и члены

  • связи между классами изображают в виде стрелок

  • классовые диаграммы наглядно представляют иерархию классов, полученную при многократном наследовании

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

  • Отсутствие необходимости явного указания свойств и методов для производимых объектов

  • Гибкое определение уравнения абстракции предметной области

  • Возможность моделирования сколь угодно сложной предметной области

Простой и прямолинейный подход к построению свойств и методов

  1. Понятие инкапсуляции

Формализация (понятие инкапсуляции в математике)

  1. лямбда – исчисление

    • лямбда термы выполняют роль объектов

    • связанные переменные выполняют роль свойств

    • свободные переменные выполняют роль методов

  2. Комбинаторная логика

  • Комбинаторы роль объектов

  • Переменные роль свойств

  • Комбинаторы роль методов

  1. Инкапсуляция в C#

Степень инкапсуляции:

  1. Public – публичная область видимости

Private – приватная область видимости

Расширение области видимости:

  • Protected – доступность из класса и классов наследников

  • Internal – доступность из сборки с описание объекта

  • Protected internal – доступность из класса с описанием объекта, а также из сборки с описанием объекта

Инкапсуляция полей и констант:

1) Поле:

  • Инициализация факультативна, однако запрещен доступ к полям и методам того же типа

  • Поля структуры не подлежат инкапсуляции

2) Константа:

  • Значение должно быть вычислено в процессе компиляции

3) Поле только для чтения:

  • Необходимо инициализировать в описании или конструкторе

  • Значение обязательно должно быть вычислимым в ходе компиляции

  • Занимает область памяти

Статические поля и константы принадлежат классу а не объекту.

  1. Свойства в C#

Свойства:

  • Свойства классов, структур и интерфейсов контролируют доступ к полям

  • Свойства могут иметь 2 компонента:

    • Программный код для чтения значений

    • Программный код для присвоения значений

  • Могут быть:

    • Только на чтение

    • На чтение и на запись

    • Только на запись

Преимущества инкапсуляции:

      • Унификация моделируемой предметной области

      • Прямолинейный подход к модификациям предметной области

      • гибкое управление уровнем абстракции данных

Безопасность и независимость пользователя

  1. Понятие полиморфизма

Полиморфизм позволяет переопределять реакцию объекта производного класса на метод, определенный в базовом классе.

Преимущества полиморфизма:

  • унификация обработки объектов различной природы

  • снижение стоимости ПО

  • повторное использование кода

  • интуитивная прозрачность исходного текста

  • строгое математическое основание

концепция является универсальной и в равной степени применимо в ООП

  1. Методы вызова процедур

Методы вызова процедур:

  1. Вызов по значению:

  • Формальный параметр является копией фактического параметра

  • Фактический параметр является выполняемым

  1. Вызов по имени (ссылке)

  • Формальный параметр является подстановкой фактического параметра

  • Фактический параметр должен быть переменной, формальный параметр является копией фактического параметра

  1. Вызов по необходимости

  • Значение не передается вызывающей функции

  • Не следует использовать в методах до того, как значение будет получено

  1. Передача параметров

  • По умолчанию параметры передаются по значению

  • Out и ref позволяют передавать параметры по ссылке

Out – можно не инициализировать

Ref – необходимо инициализировать в вызываемом методе, а в вызываемом можно как читать так и записывать

  1. Перезагрузка методов

  • Исполнение методов, используемых одинаковые имена

  • Изменение числа, типов и последовательности параметров

  • можно использование Sqr(int) и Sqr(long)…

  1. Список параметров

  • В с# можно описывать методы со списком параметров

  • Для задания параметра, который представляет собой список, используют массив

Компилятор передаёт параметр как массив заданного типа

  1. Обобщения

  2. Итераторы

Назначение:

  • Определение последовательности обхода множества оператором for each

  • Перечисление – объект, который реализует интерфейс

  • Итератор – это средство реализации перечисления

С помощью итераторов можно реализовывать не только перечислители в чистом виде, но и просто методы, которые возвращают IEnumerate или IEnumerator.

Блок итератора отличается от обычного блока наличием одного или более операторов yield.

Yield return – следующий элемент итерации

Yield break – конец итерации

Индексаторы:

  • Предоставляют индексируемый доступ к данным, подобно доступу к элементам массива

  • Похожи на свойства, но получают как параметр идентификатор или индекс на элемент, с которым работают

  • На практике используют описание оператора [] для произвольного типа

Перегрузка операторов изменение программного кода в зависимости от цел. зн-я того или иного метода:

  1. могут перегр-ся унарные и бинарные операторы

  2. не может быть изменён приоритет операторов

  3. не все операторы перегружаемы

  4. описание операторов:

  • используют описание стат. метода

  • исп-т ключевое слово operator

имеют 1 или 2 параметра с которыми работает оператор

  1. Индексаторы

  2. Связывание

  3. Понятие события

События в Математике:

Событие – соотнесение над объектом предметной области. Произв. семейство объектов может быть параметризовано не только типами, но и событиями.

События в программировании:

Событие – способ внедрения фрагмента в код с целью изменения поведения программы.

Делегаты – тип, который описывает сигнатуру метода (список, типы и последовательность параметров)

Преимущества СОП:

  • возможность моделирования произвольных реальных объектов

  • потенциальная лёгкость настройки интерфейса

  • программирование основанное на сценариях

  • гибкость реинженеринга ПО

  • строгое мат. осн-е (концептуализация)

процент повторного использования кода высокий

  1. Делегаты

Делегаты – тип, который описывает сигнатуру метода (список, типы и последовательность параметров)

Управление событиями с помощью делегатов:

  • переменная делегат может иметь пустое значение null (метод не неазначен)

  • пустая переменная делегат не может быть вызвана (искл ситуация)

  • Переменные – делегаты являются объектами первого рода; их можно хранить в структурах данных, передавать как параметр.

Виды делегатов:

  1. Единичные

  • Содержат ссылку к одному единственному методу

  • Наследники класса System.Delegate

  1. Множественные

  • Содержат связанный список ссылок к методам

  • Наследник класса System.MulticastDelegate

System.MulticastDelegate

  • при вызове использует последовательно друг за другом все методы из списка

  • если multicast делегат возвращает значение или имеет ref или out параметр, результат только последний вызванный метод от списка методов делегата

  • если при вызове multicast делегата один из методов в списке вызвал исключение, следовательно метод из списка не вызывается

на практике single-cast делегаты почти не используются и под делегатом обыкновенно понимают multicast

  1. События

События:

  • Используются для уведомления о некотором событии

  • Объект, вызывающий событие – инициатор (sender)

  • Объект, получающий событие – получатель (receiver)

  • Для получения события получатель предварительно подписывается на него

  • События поддерживаются через делегаты

  • События в с# специальные сущности делегата, декларированные ключевым словом event

Различия событий и делегатов:

  • События не эквивалентны члену, переменной типа делегат

  • События могут быть членами интерфейса, а делегаты не могут

  • Вызов события может происходить только из класса в котором оно описано

  • Доступ к событию по умолчанию синхронизирован

Конвенция для событий:

  • делегат который использует события

  • имеет имя обретаемое от глагола + EventHandler (SomeVerbEventHandler)

  • возвращает void и принимает 2 параметра (объект-инициатор типа System.Object и объект, содержащий данные о событии типа, наследника System.EventArgs)

  • события объявляют как public, начинаются с заглавной буквы и заканчиваются глаголом

  • Для вызова событий создают protected метод, не имеющий возвращаемого типа

  • метод-получатель (обработчик) события имеет имя объект_событие

Делегат System.EventHandler:

  • Описывает ссылку к callback методу, который обрабатывает событие, для которого не нужна дополнительная информация

Часто используется в .net Framework