Міністерство освіти і науки України
Національний університет «Львівська Політехніка»
Кафедра САПР
ЗВІТ
Про виконання лабораторної роботи №8 з курсу:
“Проблемно-орієнтоване програмування”
на тему:
ОСОБЛИВОСТІ МОВИ ОБ’ЄКТНО-ОРIЄНТОВАНОГО
ПРОГРАМУВАННЯ С++
1. МЕТА РОБОТИ
Мета роботи - ознайомлення з особливостями мови об’єктно-орiєнтованого програмування С++.
2. ТЕОРЕТИЧНА ЧАСТИНА
Основнi вiдмiнностi С++ вiд С
С++ - унiверсальна мова програмування, яка задумана так, щоб зробити програмування бiльш приємним для серйозного програмiста. С++ була розроблена так, щоб дати можливiсть однiй людинi без надмiрних зусиль написати програму в 2500 стрiчок.
За базову мову для С++ була вибрана мова С, тому що:
вона вiдносно низького рiвня.;
вiдповiдає бiльшостi задач системного програмування;
вже створено мiльони стрiчок бiблiотечних функцiй i сервiсних програм, написаних на С;
iснують сотнi тисяч програмiстiв, якi знають С.
Основна рiзниця мiж цими мовами полягає у методi побудови програм: мова С - модульна мова i внаслiдок цього парадигма програмування звучить так
Об’єктно-орiєнтоване програмування (ООП) включає в собi найкраще з структурного програмування i, використовуючи новi концепцiї дозволяє програмiсту набагато простiше розбити задачу на пiдзадачi, якi пiддаються керуванню. Цi концепцiї називаються: об’єкти, полiморфiзм, успадкування. Розглянемо їх детальніше.
Об’єкти
Об’єкт це логiчна одиниця, яка мiстить данi i код, що манiпулює цими даними. Всерединi об’єкту, код i/або данi можуть належати тільки даному об’єкту i недосяжнi будь-де за межами об’єкту. Таким чином об’єкт забезпечує певний рiвень захищеностi вiд iншої частини програми, що може випадково змiнити або некоректно використати цi данi.
Об’єкт - це змiнна визначена самим користувачем. Коли ви визначаєте об’єкт ви неявно створюєте новий тип даних.
Інкапсуляція
Інкапсуляція (incapsulation) – це механізм, який зв’язує воєдино код і дані, якими він управляє, а також забезпечує їхній захист від зовнішнього або неправильного використання. Всередині об’єкту код (функція) і дані можуть бути закритими (private) або відкритими (public). До закритої частини коду або даних не можна доступитись зовні, відкриті код або дані доступні з довільної частини програми. Як правило, відкрита частина коду забезпечує керовану взаємодію (інтерфейс) із закритими елементами об’єкта.
Полiморфiзм
ООП пiдтримує полiморфiзм який означає що одне iм’я може бути використане для декiлькох зв’язаних, але дещо рiзних застосувань. Наприклад, ви можете мати програму, що визначає три рiзних типи стека. Один стек застосовується для типу integer, iнший для float а наступний для long. Завдяки полiморфiзму ви створюєте функцiї роботи з елементами стеку, наприклад, push(), pop(), а компiлятор сам вибере потрiбну функцiю в залежностi вiд типу виклику.
Поліформізм дозволяє спростити програму, створюючи один інтерфейс для виконання різних дій. Відповідальність за вибір конкретної дії (методу) і ситуації, яка при цьому виникає, покладається на компілятор. Програмісту не обов’язково вникати в цей процес. Необхідно лише пам’ятати відповідні правила, і коректно застосовувати загальний інтерфейс.
Успадкування
Успадкування (inheritance) – це процес, впродовж якого один обєкт може набувати властивості іншого. Він займає авжливе місце в С++, оскільки підтримує концепцію класифікації (classification).
Форматування
Деколи виникає необхідність регулювати вивід тексту. Функція width() вказує мінімальне число символів, які будуть використані наступною операцією виводу числового значення або символьної стрічки.
Відкривання і закривання файлів
В С++ реалізуються три типи потоків для роботи з файлами.
ifstream in; відкривання файла для читання
ofstream out; відкривання файла для запису
fstream both; відкривання файла для читання і запису
Якщо ви відкрили потік, єдиний шлях зв’язати потік з файлом реалізується функцією open(), яка є членом кожного з трьох класів, які реалізують ці потоки.
Класи
Класи є однією з важливих частин мови C++. Для того, щоб створити об’єкт, в мові C++ потрібно спочатку визначити його загальний вигляд, використовуючи ключове слово class. З синтаксичної точки зору клас подібний на структуру. Розглянемо в якості прикладу клас, який визначає тип під назвою stack. З його допомогою можна створити реальний стек.
#define SIZE 100
// В цьому фрагменті оголошується клас stack
class stack {
int stck[SIZE];
int tos;
public:
void init();
void push(int i);
int pop();
};
Ввід і вивід для типу, визначеного користувачем (перевантаження операторів).
Розглянемо процедуру перевантаження операторів вводу-виводу (“>>” і “<<”) для обєктів, визначених користувачем. Оператор виводу “<<” називається оператором вставки (insertion operator), тому, що він вставляє символи в потік. Аналогічно, оператор вводу “>>” називають оператором видобування (extraction operator), тому що він вибирає символи з потоку. Функції, які перевантажують оператори вставки і видобування називають функціями вставки (insetrers) і видобувавння (extractors) відповідно.
Створимо клас two_d для роботи в декартовій площині. Загальна форма первантаженого оператора вводу (видобування) така:
istream & operator >> (istream any_stream, class_name & object)
{ return any_stream; } // програма вводу користувача
Перший параметр мусить бути посиланням до об’єкта типу istream. Другий параметр також посилання. Це необхідно, тому що змінні класу class_name може бути змінена. Функція повертає посилання на об’єкт типу istream.
Загальнийй вивід (вставка) для типу користувача будується подібним чином:
ostream & operator << (ostream & any_stream, class_name object)
{ return any_stream; } // програма виводу користувача
3. ЗАВДАННЯ ДО ЛАБОРАТОРНОЇ РОБОТИ
21. Створити клас three для роботи з точками трьохмірного простору (змінні типу float). Написати програму, яка використовуючи перевантажений
оператор вводу-виводу, демонструє ввід і вивід елементів даного класу (на прикладі 5-ти елементів типу three).
4. ХІД РОБОТИ
#include "stdafx.h"
#include <iostream>
#include <conio.h>
using namespace std;
class tree
{
float x = 0, y = 0, z = 0;
public:
tree(){};
tree(float a, float b, float c)
{
x = a; y = b; z = c;
}
friend ostream & operator <<(ostream & stream, tree obj);
friend istream & operator >>(istream & stream, tree & obj);
};
ostream &operator << (ostream &stream, tree obj)
{
cout << "Ви ввели координати х, у, z: " << endl;
stream << obj.x << " " << obj.y << " " << obj.z << endl;
return stream;
}
istream &operator >> (istream &stream, tree & obj)
{
cout << "Введiть координати х, у, z: " << endl;
stream >> obj.x >> obj.y >> obj.z;
return stream;
}
int main(void)
{
setlocale(0, "Rus");
system("cls");
tree a, b, c;
cin >> a;
cin >> b;
cin >> c;
cout << a;
cout << b;
cout << c;
return 0;
}
Приклад виконання:
/
5. ВИСНОВОК
Я ознайомився з особливостями мови об’єктно - орiєнтованого програмування С++, навчився будувати класи та переванажувати оператори вводу – виводу.