МІНІСТЕРСТВО ОСВІТИ ТА НАУКИ УКРАЇНИ
Національний університет “Львівська політехніка”
Звіт
до лабораторноі работи № 2
Реалізація абстракцій в мові програмування С++.
Львів 2010
1. МЕТА РОБОТИ
Мета роботи - Реалізація абстракцій в мові програмування С++.
2. ТЕОРЕТИЧНА ЧАСТИНА
1. Компоненти об’єктно-орієнтовааного проектування. Розрізняють чисто об’єктно-орієнтовані мови та змішані.
До перших належать Smalltalk, Ada, Simula, до других С++, CLOS, Об’єктний Паскаль та інші.
Введемо визначення п’яти ключових компонент об’єктно-орієнтованого проектування: - Об’єкт Об’єкт - це інкапсульована абстракція, яка включає інформацію про стан і чітко визначену множину протоколу доступу (повідомлення, які опрацьовує об’єкт).
- Повідомлення Повідомлення - це спеціальний символ, ідентифікатор або ключове слово з або без параметрів, яке представляє дію.
- Клас Представляє певний тип об’єктів і задається прои допомозі опису класу, який визначає змінні стану і протокол доступа до об’єктів даного класу. Класи організуються ієрархічно, причому підкласи наслідують властивості базових класів. В деяких об’ктно-орієнтованих мовах класи - це також і об’єкти.
- Екземпляр об’єкта Об’єкти належать до будь-якого класу. Властивості екземпляра об’єкта визначаються описом класу.
- Метод Метод існує для кожного повідомлення, визначеного для деякого класу. Метод визначає реакцію об’єкта на повідомлення. Як правило складається з ряду виразів і може використовувати протокол з іншого класу.2. Опис абстракцій в мові С++.
Мова С++ використовує подібну термінологію
Клас Вводить новий тип даних
Об’єкт Змінна типу className
Дані стану Об’являються в опису класу і називаються членами
Повідомлення Повідомлення, які об’єкт може опрацювати, вказуються при допомозі прототипів функцій в описі класу. Прототипи функцій включають ім’я функції, список параметрів та тип, який повертає функція.
Метод Це визначення (реалізіція) функцій. Прототипи функцій і їх визначення разом представляють собою повідомлення, які об’єкт може опрацьовувати. В сукупності вони називаються функціями-членами. До членів класу відносяться функції-члени і поля даних.
Підклас Похідний клас. Його суперклас називається базовим класом.
3. ЛАБОРАТОРНЕ ЗАВДАННЯ
Варіант № 20
Скласти програму на С++, яка представляє стандартний тип як об’єкт і дозволяє порівнювати дані між собою, проводити операції, що допускаються над даним типом integer і вивести на екран ці дані.
Текст програми
#include "stdafx.h"
#include<iostream>
#include<stdlib.h>
using namespace std;
class INTEGER {
private:
int value;
public:
// Конструктори і деструктори
INTEGER() {}
INTEGER(int anlnt) { value = anlnt; }
~INTEGER() {}
//Mетоди доступа
int getValue() { return value; }
void setVlue(int aValue) { value = aValue; }
// Методи порівняння
friend int operator==(const INTEGER& anlnt1, const INTEGER& anlnt2)
{
return anlnt1.value == anlnt2.value;
}
friend int operator>(const INTEGER& anlnt1, const INTEGER& anlnt2)
{
return anlnt1.value > anlnt2.value;
}
friend int operator<(const INTEGER& anlnt1, const INTEGER& anlnt2)
{
return anlnt1.value < anlnt2.value;
}
//Арифметичні методи
friend INTEGER operator+(const INTEGER& anlnt1, const INTEGER& anlnt2)
{
return INTEGER(anlnt1.value + anlnt2.value);
}
friend INTEGER operator-(const INTEGER& anlnt1, const INTEGER& anlnt2)
{
return(anlnt1.value - anlnt2.value);
}
friend int operator*(const INTEGER& anlnt1, const INTEGER& anlnt2)
{
return(anlnt1.value * anlnt2.value);
}
friend INTEGER operator/(const INTEGER& anlnt1, const INTEGER& anlnt2)
{
if(anlnt2.value == 0) {
cout << "Divide by zero.Stop";
exit(1);
}
return(anlnt1.value / anlnt2.value);
}
//Методи друку
friend ostream& operator<<(ostream& stream, const INTEGER& anlnt)
{
stream << anlnt.value;
return stream;
}
};
void main()
{
INTEGER one,two,three,four, varOne;
char choice;
int a,b;
bool fQuit=false;
cout<<"vvedit' operaciy: \n"<<" + \n"<<" - \n"<<" * \n"<<" < \n"<<" > \n"<<" / \n"<<" o \n"<<" = \n"<<endl;
while(1)
{
cin>>choice;
switch(choice)
{
case '+':
cin>>a;
one.setVlue(a);
cin>>b;
two.setVlue(b);
varOne=one+two;
cout<<"1: "<<varOne.getValue()<<endl;
break;
case '-':
cin>>a;
one.setVlue(a);
cin>>b;
two.setVlue(b);
varOne=one-two;
cout<<"1: "<<varOne.getValue()<<endl;
break;
case '*':
cin>>a;
one.setVlue(a);
cin>>b;
two.setVlue(b);
varOne=one*two;
cout<<"1: "<<varOne.getValue()<<endl;
break;
case '=':
cin>>a;
one.setVlue(a);
cin>>b;
two.setVlue(b);
if(one==two)
cout<<"Rivni"<<endl;
else cout<<"nifiga ne rivni"<<endl;
break;
case '>':
cin>>a;
one.setVlue(a);
cin>>b;
two.setVlue(b);
if(one>two)
cout<<"one bilwe"<<endl;
else cout<<"one menwe"<<endl;
break;
case '<':
cin>>a;
one.setVlue(a);
cin>>b;
two.setVlue(b);
if(one<two)
cout<<"two bil'we"<<endl;
else cout<<"two menwe"<<endl;
break;
case '/':
cin>>a;
one.setVlue(a);
cin>>b;
two.setVlue(b);
varOne=one/two;
cout<<"1: "<<varOne.getValue()<<endl;
break;
case 'o':
cin>>a;
one.setVlue(a);
cout<<"vuvid 4erez perezavantagenn9: \n"<<one;
break;
}
}
}
Результат виконання програми
Висновок
Я навчився реалізовувати абстракції в мові програмування С++.