
Лекция 1
В следствии указанной интерпретации отношений между модулями в композиционной схеме в программе существуют все используемые в ней модули (как созданные, так и те, на которых они создавались). При использовании классификационной схемы, реально существуют только конструкции (объекты) которые являются представители класса, на основах которых они создавались в программе.
На классном уровне допускается использование композиционной схемы при этом класс, в котором есть интерпретация содержит – будет являться контейнером
На основе классификационной схемы реализуется 3 вида действий широко использующеся в разрабодке программного обеспечения:
объектно-ориентирующий анализ (в результате его выполнения показывается что должно делать по)
объектно-ориентированное проектирование (как оно должно это делать)
объектно-ориентированное программирование (строится текст для выполнения)
Для реализации классификационной схемы в программировании были разработанные специальные языки ООП, которые обычно строились путем расширения подпрограммы или процедурных языков меанизмом ООП
Существуют языки которые работаю только с классами
Обеспечивает формирование представления о свойствах предмета путем мысленного удаления его деталей
Инкапсуляция обеспечивает создания оболочки
Наследование – обеспечивает передачу свойств от предшественника к последователю
Руководствуясь принципом наследования из классов можно строить иерархию
Именно поэтому объектно-ориентированная схема – классификация, а ООП подход – классификационный
Одиночное наследование – последующий класс который называется производным является подклассом только одного класса-предшественника, который называется базовым
Множественное наследование – при множественном наследовании производный класс может наследовать свойства разных базовых классов
Схема множественного наследование усложняет как процесс программирования так и понимание программ, Потому она реализуется не на все языках.
Руководствуясь принципом наследования, можно создавать класс, обладающие свойствами предшественниками и расширяющие или ограничившие путем добавления собственных свойств
Полиморфизм – обеспечивает программной конструкции (обычно начиная с подпрограмм) свойство иметь несколько форм (реализации)
«Обьектно ориентированое парадигма» Сидоров
Лекция 2
на основе класса создаются конструкции, которые называются объектами. Причем обозначение класса это обозначение типа, а обозначение объекта – как обозначение переменной
Сокрытие информации. Раздельная компиляция.
Для реализации фундаментального принципа сокрытия информации, сущность которого состоит в том чтобы скрыть от пользователя абстрактного типа данных детали реализации его ресурсов. Которые представлены в интерфейсе на классном уровне инкапсуляции, так же как и на модульном, используется раздельная компиляция.
Сущность ее состоит в том, что пользователя АТД представляется только интерфейс в виде исходных кодов.
Реализация ресурсов компилируется раздельно в объектный код и в таком виде предъявляется пользователю
Таким образом при разработке программного обеспечения компилируется интерфейсы, а реализация ресурсов подключается на этапе сборки программы.
Лекция 3
Особености системы типов в С++
Если тип определяемый, его надо описать
Используюя любой тип пользователь прописывает или простую или указательную переменную
В языке 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), а інтерфейс представлено за допомогою механізму метаданих. Перевагою такої структури програмного модуля є те, що метадані створюються не програмістом, | середовищем, автоматично оновлюються при перекомпіляції початкового тексту реалізації ресурсів, знаходяться в одному файлі з реалізацією. Існують спеціальні інструменти їх читання і використання програмістом і програмними засобами.