Вы находитесь на странице: 1из 42

Основы объектно-

ориентированного
программирования

Чернойван Василий Александрович


va@chernoivan.ru
http://chernoivan.ru/oop/
Контрольная работа
1) — Что такое класс
— Что такое поведение объекта

2) — Что такое объект


— Что такое состояние объекта
Сигнатура, прототип и семантика методов
• Сигнатура – имя метода + типы формальных
параметров; Прототип = Сигнатура + тип
возвращаемого значения

• Семантика – определяет смысловую нагрузку


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

XMLDoc
ps://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/xmldoc/xml-documentation-comme
Правильное описание класса
Гетеры и сеттеры
Принципы ООП
Краткое содержание
предыдущих серий
• Мы пишем программы, чтобы помочь
людям, конечным пользователям

• Наш метод – построение моделей

• Нас интересуют изменяющиеся системы

• Писать программы сложно

• ООП — метод, с помощью которого мы


пытаемся «бороться» со сложностью,
присущей реальным системам
• Абстрагирование (абстракция)
• Инкапсуляция
• Модульность
• Иерархичность
Абстрагирование
Абстрагирование
Упрощенное описание системы
(построение модели)

• Выбираются существенные для задачи


характеристики.

• Несущественные характеристики
опускаются

• Декомпозиция системы на классы —


единицы абстракции
Абстрагирование в C#

• Класс – полноценный тип, такой же, как


встроенные.

• Конструкция class {} это описание


нового типа.
Инкапсуляция
Cокрытие деталей реализации

• Отделяет друг от друга детали устройства


объекта и поведение.
• Поведение, доступное пользователям класса
(программистам) - интерфейс
• Детали устройства (тело метода, члены-данные)
– реализация - скрыты от пользователя
• Класс рассматривается как «черный ящик»,
работать с которым можно исключительно
через его интерфейс
+ Комментарии
Интерфейс класса
Интерфейс
• Взаимодействие
Семантика — часть
• Ответственность
интерфейса
• Контракт
Реализация класса
Инкапсуляция:
Модификаторы доступа в C#
•public - член класса может использоваться
как извне так и внутри класса и его потомков

•protected - член класса доступны внутри


класса а также внутри производных классов
(см. наследование)

•private – член класса может использоваться


только функциями-методами класса, к
которому он принадлежит
Модификаторы доступа в UML
Инкапсуляция: итог
• Каждый класс состоит из двух составляющих:
– интерфейс – то, что видно «снаружи»
– реализация – то, что видно только «изнутри»
• Для управления доступом к членам класса
используются модификаторы private, protected и
public
• Все данные объекта, его состояние, объявляются
с ключом private
• Для доступа к состоянию объектов используются
дополнительные методы – геттеры и сеттеры
(свойства)
Модификаторы доступа в UML
(маленькое уточнение)
ример: пересечение прямоугольнико
Иерархичность
Иерархичность
упорядочение абстракций, расположение
их по уровням.

• Абстракции образуют иерархии


• Каждый из «нижних» уровней
абстракции поддерживает абстракции
более «высокого» уровня
Иерархия is-a: Наследование
• Отношение между классами:
«то» является «этим»
– родитель/потомок
– обобщение/специализация
• Более общий класс –
базовый класс, суперкласс, родитель
• Более специализированный –
производный класс, подкласс, наследник,
потомок
Диаграмма классов: наследование

Крестики-нолики это игра


Шашки являются игрой
Наследование в C#

Крестики-нолики являются игрой


Шашки это игра
Иерархия «быть частью»: Агрегация

• Отношение (связь) между объектами


– целое/часть пример: Растение
– владение, пример: Акционер

• Отношение принадлежности

• Включение объектами других объектов


Диаграмма классов: агрегация

Поле (field) состоит из клеток(cell).


На поле размещаются фигуры(figure)
C#: агрегация
Примеры иерархий: итог
• Иерархия классов - иерархия «являться»
(«is-a»)

• Иерархия объектов – иерархия «быть частью»


(«part-of »)

• Разные иерархии существуют независимо


друг от друга, являются разными
«плоскостями сечения» системы`
Модульность
Модульность
Разделение программы на фрагменты, которые
компилируются по отдельности

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


себе некое множество классов

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


абстракции (классы)

• Модуль объединяет абстракции одного уровня,


тем самым поддерживая иерархичность
Модульность
• Модули имеют

— интерфейс (совокупность интерфейсов


классов, доступных пользователям)

— реализацию (которая может содержать классы,


недоступные пользователям)

— связи с другими модулями (связи классов


внутри модуля с классами внутри других
модулей)
Все объекты и все связи
Модули
Зависимости модулей
Модульность в C#
• В смысле раздельной компиляции и ограничения
доступа к классам модуль это сборка (assembly)

• В смысле объединения близких по смыслу


абстракций логически как модуль можно
рассматривать пространство имен (namespace)

• К классам внутри сборки можно регулировать


доступ, используя модификаторы public и internal
Пространства имен
Пространства имен
• Определяют область, содержащую набор
связанных объектов языка — классов, структур,
интерфейсов, делегатов, перечислений
• Пространства имен могут быть вложенными
• Полное имя классов включает в себя полное имя
пространства имен, в котором они определены
• Обращаться к классу можно по полному имени
• Директива using делает видимыми имена из
одного пространства имён в другом пространстве
имён
Пространства имён в UML

Пространства имён
Спасибо за внимание

Вопросы?

Вам также может понравиться