Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекції 1-8.docx
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
6.11 Mб
Скачать

Лекция 1

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

На классном уровне допускается использование композиционной схемы при этом класс, в котором есть интерпретация содержит – будет являться контейнером

На основе классификационной схемы реализуется 3 вида действий широко использующеся в разрабодке программного обеспечения:

  1. объектно-ориентирующий анализ (в результате его выполнения показывается что должно делать по)

  2. объектно-ориентированное проектирование (как оно должно это делать)

  3. объектно-ориентированное программирование (строится текст для выполнения)

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

Существуют языки которые работаю только с классами

Обеспечивает формирование представления о свойствах предмета путем мысленного удаления его деталей

Инкапсуляция обеспечивает создания оболочки

Наследование – обеспечивает передачу свойств от предшественника к последователю

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

Именно поэтому объектно-ориентированная схема – классификация, а ООП подход – классификационный

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

Множественное наследование – при множественном наследовании производный класс может наследовать свойства разных базовых классов

Схема множественного наследование усложняет как процесс программирования так и понимание программ, Потому она реализуется не на все языках.

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

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

«Обьектно ориентированое парадигма» Сидоров

Лекция 2

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

Сокрытие информации. Раздельная компиляция.

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

Сущность ее состоит в том, что пользователя АТД представляется только интерфейс в виде исходных кодов.

Реализация ресурсов компилируется раздельно в объектный код и в таком виде предъявляется пользователю

Таким образом при разработке программного обеспечения компилируется интерфейсы, а реализация ресурсов подключается на этапе сборки программы.

Лекция 3

Особености системы типов в С++

  1. Если тип определяемый, его надо описать

  2. Используюя любой тип пользователь прописывает или простую или указательную переменную

В языке C# использование типа при описания обьекта является иным. Они делаяться на размерные и ссылочные. Значения раздельного хранятся в стеке, а сами обьекты являются аналогами простых объектах в с++. Значение объектов ссылочного типа является ссылка на значение размещаемое в куче. А значет перед инициализации ссылки необходимо использовать оператор new.

При это синтекис доступа к значений в куче аналогичен к доступу к занчению раззмерного объекта (отсутствует операция разыменование)

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

По этому объекты базовых пречесненных, именнованых типов всегда являются размерными

А объекты классов ссылочные

Область действия

На область видимости членов класса распространняется действие мембранного эффекта. Например если в классе описано данное и переменная с таким же обозначением описана в методе класса то тело класса и тело метода действует как вложенное в блокеееееееее. Однако мембранный эффект можно преодалеть используя операцию разрешенния к области действия для ждоступа к глобальной переменной (с++ ::) или (c++ C# this)

Лекція 3 Будова класу

Основною програмною конструкцією (капсулою) об'єктно-орієнтованого рівня інкапсуляції є клас. Будь-який клас, як програ­мна конструкція складається з позначення, інтерфейсу і тіла. По­значення є ідентифікатором. Інтерфейс описує ресурси, що нада­ються класом. Тіло складається з конструкцій, що описують реалі­зацію поданих класом ресурсів. Залежно від конкретної мови програмування, будова класу може відрізнятися. Наприклад, у мо­вах програмування C++, С# клас складається з позначення і тіла. Позначення класу - це ідентифікатор, який іде за зарезервованим словом «class». Тіло класу міститься між обмежувальними симво­лами «{ « і »}» та містить як інтерфейс, такі ресурси, що реалізу­ються класом. Тіло може мати продовження і за обмежуючими символами (мова C++). У цьому продовженні зазвичай описується

реалізація ресурсів, оголошених у класі. Таким чином, якщо тіло класу має продовження, то в основній його частині описується інтерфейс, а в продовженні - реалізація ресурсів, що надаються класом. Щоб пов'язати реалізацію ресурсу з відповідним класом, у продовженні опису класу слід використовувати оператор дозволу контексту («::»).

Оскільки клас, як правило, є абстрактним типом даних, то тіло класу повинно містити опис таких компонентів:

- значень, що надаються абстрактним типом даних (класом);

— операцій (підпрограм), що забезпечують обробку значень абстрактного типу даних (класу).

Опис значень визначає множину значень, що обробляються класом, а опис підпрограм - множину операцій, спрямованих на обробку значень, визначених у класі. До того ж, для представлення значень (називаються даними-членами) використовуються описи визначених типів і типів, що визначаються, а для представлення операцій використовуються закриті підпрограми, які називаються функціями-членами або методами.

У тілі класу можна розрізняти частини, які позначаються спеці­альними ключовими словами (наприклад, public, private). Наприк­лад, у мові С-н- можна дати такий приклад опису та використання класу:

На основі класів створюються конструкції, які називаються об'­єктами (Plane в наведеному прикладі). До того ж, позначення класу використовується як позначення типу, а позначення об'єкта, як позначення змінної, при відомому описі змінної. Тому, об'єкт - це програмна конструкція яка створюється на основі класу як його примірник і має в своєму складі всі компоненти класу. Об'єкт, що представляє клас, дійсно існує в програмі і може діяти. На основі одного класу може бути створено скільки завгодно об'єктів.

Приховування інформації. Роздільна компіляція

Для реалізації фундаментального принципу побудови абстрактних типів даних – приховування інформації, суть якого полягає в тому, щоб приховати від користувача абстрактного типу даних

деталі реалізації його ресурсів, які представлені в інтерфейсі на клас­ному рівні інкапсуляції, так само, як і на модульному, використову­ється роздільна компіляція. Нагадаємо, що суть її полягає в тому, що користувачеві абстрактного типу даних надається лише інтерфейс у вигляді початкових кодів мови програмування, а реалізація ресурсів компілюється роздільно в об'єктний код. Таким чином, розробляючи програмне забезпечення, компілюються інтерфейси, а реалізації ре­сурсів підключаються на етапі збору програм (рис. 1.4).

У мові C++ приховування інформації здійснюється шляхом розміщення інтерфейсу класу в основній частині тіла, в заголовно­му файлі з розширенням «.h», а реалізація ресурсів інтерфейсу роз­міщується в продовженні опису тіла у файлі з розширенням «.срр» після приведення у формат об'єктного коду. Підключення заголов­ного файлу (використання класу в програмі) здійснюється як мак­росу з допомогою оператора періоду компіляції «include» (рис. 1.4).

Розглянемо приклад використання роздільної компіляції (мова C++):

class Time s

X

public:

void set_Time(int, int, int);

void display JTimeO; private:

int hour;

int min;

int sec;

};

Наведений опис інтерфейсу класу Time поміщається в заголов­ний файл з позначенням «time.h». Далі, в продовженні опису тіла описуємо реалізацію ресурсів, показаних в інтерфейсі:

void Time :: set_Time(int h, int m. int s)

{

}

void Time :: display_Time()

{

}

Наведений опис розміщується в початковому файлі Тime.срр,

структура якого є такою:

# include «Наведений опис розміщується в початковому файлі Тime.срр,

структура якого є такою:

# include «Тime.срр»

< реалізація ресурсів>

Створений файл з позначенням «Тime.срр» компілюється в об'­єктний код (див. рис. 1.4).

Нарешті, описується програма користувача, яка застосовує об'єкти - екземпляри класу Time (файл main у такому прикладі):

# include «Тime.срр»

void main ()

{

Time my_Time;

my_Time.set = Time(13, 30, 5);

my_Time. Display_Time();

}

Таким чином, якщо припустити, що на момент часу написання основної програми файл «Тime.срр» представляє об’єктний код, то бачимо, що реалізація всіх ресурсів прихована від користувача. Винятком є підпрограми-методи, реалізовані як «іпііпе», котрі зав­жди повинні знаходитись в основному описі тіла, в заголовному файлі, У файлі «Тime.срр» за допомогою використання оператора «include» перевіряється правильність сигнатур методів в інтерфейсі і реалізації класу.

У файлі з позначенням «МаinТіme.срр» за допомогою викори­стання оператора «include» встановлюється розмір пам'яті, необ­хідний для створюваного об'єкта класу Time (тільки для значень — даних, що містяться в об'єкті).

Зважаючи на необхідність приховування інформації про реалі­зацію ресурсів класу, і використовуючи для цього роздільну компі­ляцію, можна для мови С++ вказати таку файлову структуру класу, як показано на рис. 1.5.

У мові С# реалізація приховування інформації принципово ін­ша (рис. 1.6).

Початковий текст компілюється в керований модуль з розши­ренням .netmodule (.dll), у якому розміщується реалізація ресурсів, що представлена на єдиній проміжній мові платформи .Net (Common Intermediate Language), а інтерфейс представлено за допомогою механізму метаданих. Перевагою такої структури програ­много модуля є те, що метадані створюються не програмістом, | середовищем, автоматично оновлюються при перекомпіляції поча­ткового тексту реалізації ресурсів, знаходяться в одному файлі з реалізацією. Існують спеціальні інструменти їх читання і викорис­тання програмістом і програмними засобами.