Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
OOP_pz022 (1).doc
Скачиваний:
4
Добавлен:
29.08.2019
Размер:
239.62 Кб
Скачать

4.Парадигма атд

У модульності не можливе тира-жування екземплярів , досягти цієї можливості дозволяє пара-дигма АТД .П-д в С++ :Typedef ; на ПаскалІ :Type MyType=…; на Фортрані: встроєний тип Complex ;

Тип даних : 1)область допусти-мих значень

2)множина допустимих опера-цій .

П-д :

class Comple //ім’я типу;

{ float Re,Im ;

public

friend

Cmplex operator+ (Complex a, Copmlex b);

Cmplex operator*(Complex a, Copmlex b);

Cmplex operator-(Complex a, Copmlex b);

Complex( );{RE=0 ; Im=0 ;}

//конструктор

Complex(float r){Re = r ; Im=0;}

Complex (float r,float i){Re = r ; Im = i;}

~Complex( ){ };//деструктор

ostream& operator <<(operator& 0 ,Complex c );

конструктор це член кл. за допо-могою якого створюється ек-земпляр зміних даного типу.

П-д:

void f()

{complex a;

complex b=1;

complex c=complex (2,3);//c-const

complex d=a+b;

cout<<d;

}

мотив:винекненя випливає з фреймів т.т. об'еднання в одній рамці данних та операцій над ними.

Мовні засоби:оператор class. Описувачі обмежування доступу до кл., можливість переван-таження імен ф. та символів операцій. Мови :С++,Object Pascal , парадигми підтримують стиль:Turbo Pascal,C.

П-д:

complex complex::operator+( complex a, complex b);

{return complex(a.Re+b.Re,a.Im+b.Im);

}

П-д :(бібліотека гафічних примітивів:точка,відрізок,коло…)

Class shape

{ int x,y ;int color ;

int hidden ;int kind;

….

Public :

Shape ( ) {…};

Shape (…) {…};

Void show( );

Void hide ( );

Void drow( );//нарисо-

вать

Void move (int x,int y); };

Void shape::draw()

{if (kind==1)

{//draw circle};

else if (kind==2)

{//draw dot}

else {//draw square}

}

void main()

{

shape circle;

shape dot;

circle.show();

dot.hide();

circle.drow();

dot.drow();

}

Проблема застосування АТД полягає в тому, що при необ-хідності розширити функціона-льність розробленої системи ми змушенні редагувати її на рівні вихідного текста. Це в свою чер-гу має два недоліки:

1.ускладнює розробку і підви-щує ймовірність помилок

2. таке не можливо взагалі, якщо вихідний текст відсутній.

5.Парадигма ооп.

Мови які підтримують цю парадигму:C++,Object Pascal, Small Talk…

Предметна галузь, що моделю-ється складається з сукупності об’єктів які діють один на одно-го.Кожен об’єкт має власні влас-тивості та поведінку.Взаємодія між об’єктами здійснюється шляхом так званих повідомлень. Повідлмлення-виклик метода.

Підтримуються такі об’єктно орієнтовані можливості:

1.Інкапсуляція(АТД)

2.Поліморфізм(можливість виз-начити до чого належить об’єкт)

3.Наслідування(властивості од-ного об’єкта переносять на ін-ший)

Базовий типпохідний тип

П-д:

Class shape

{int x,y;int color;int hidden;

public:

virtual void draw();

};

наслідування дає таку можли-вість

#include "shape.h"

class circle:public shape

{int radius;

public:

virtual void draw();

};

//головна програма

void main()

{circle c1,c2;

star s1,s2,s3;

c1.draw();

s1.move();

s1.draw();

}

void shape::move(int x1,int y1)

{hide();//погасити об"єкт

x=x1;//змінити координати

y=y1;

draw();//показати

}

описувач virtual дає можливість з’ясувати власника методу (ф.) навіть тоді коли неможна визначити з синтаксичних мір-кувань у даному місці програми.

Узагальнене програмування це стиль в якому алгоритми не за-лежать від типу даних.

6.Поняття про кл. в С++.Кл. та принципи ООП.Обмеження доступу до членів кл.

Кл. в С++ це тип сконструйо-ваний користувачем.

Принципи ООП:

1.Все що  у предметній області це деякі об’єкти

2.Об'єкти виконують якісь взає-модії один з одним за допомо-гою повідомлень.

3.Кожен об’єкт має власну пам'ять (незалежну), яка скла-дається з інших об'єктів.

4.Кожен клас задає поведінку об'єктів свого типу за допо-могою методів чи ф.-членів кл.

5.Кожен об'єкт є представником або екземпляром певного кл.Кл. відображує загальні властивості своїх представників.

6.Кл. можуть об'єднуватись в ієрархію т.т. в таку деревовидну структкру, яка називається ієра-рхією наслідування.

Основний зміст наслідування полягає в тому що вл. і пове-дінка кл. що належать до ієра-рхій наслідувань є доступними для кл. що розташовані нижче.

Class C

{private://забороняє доступ зовні для ф.не членів кл.,крім friend

protected://дозволяє доступ нащадкам і членам кл.

public://дозволяє доступ будь-кому

}

class C

{private:

int i;

friend void f_f(C);

protected:

int j;

public:

int k;

};

class D:public C

{

void g(C);

};

void f(C c)

{ c.k=0;//ok

c.j=0;//err

c.i=0;//err

}

friend void f_f(C c)

{c.k=0;//ok

c.j=0;//ok

c.i=0;//ok

}

void D::g(C c)

{c.k=0;//ok

c.j=0;//err

c.i=0;//ok

k=0;//ok

j=0;//ok

i=0;//ok

}

void C::h(C c)

{c.k=0;//ok

c.j=0;//ok

c.i=0;//ok

k=0;//ok

j=0;//ok

i=0;//ok

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]