Практикалық жұмыс №8

Зертханалық жұмыс№8

Практикалық жұмыс №8

Негіздер мен Объектілер

Мазмұны:

1. Объектілі бағытталған қосымшаларды жасау (Object Pascal);

2. Қосымшаның консольдық нұсқасына;қойылатын талаптар;

3. Есептеу нәтижесінің мазмұны.

Object Pascal Бағдарламалау тілін қолданып, Объектілі бағытталған қосымшаларды жасауды үйрену.

Берілген әдістемелік материалды меңгеру.

Жұмыстың мазмұны:

1. «Ұшқыш аппараттар» пәндік саланың консольдық үлгісін жасау және түзету;

2. Нұсқаға сәйкес консольдық қосымшаны дайындау және жасау (Опция «Console Application» в меню File|New);

3. Нұсқаға сәйкес Windows-қосымшаны дайындау және жасау;

4. Жасалынатын бағдарламалық өнімге қойылатын талаптар;

5. Көрсетілген пәндік сала немесе мәселе үшін бірнеше (3-тен аса) класс жасау керек;

6. Жасалған класстар жүйесінде мұрагерлік, полиморфизм және функциялардың жабылуын көрсету керек;

7. Барлық класстар үшін конструкторлар мен деструкторларды іске асыру қажет;

8. Жасалынатын пәндіксала үшін дайын кітапханалық класстарды (ішкі не сыртқы) қолдануға рұқсат берілмейді;

9. Консольдық қосымша үшін хаттардың экранда шығарылуы кириллицада жасалуы керек.

Қосымшаның консольдық нұсқасына қойылатын талаптар. Барлық класстар өздерін экранда басып шығару әдісін іске асыру керек (қалыпты көрсету);

Жұмыс істеу барысында бағдарлама объектілі бағытталған Бағдарламалау қағидаларын түсіндіру үшін шақырылатын әдістерді, функцияларды және айнымалылар жағдайын басып шығару керек.

1. Міндетті белгілеу;

2. Талаптар ерекшелігі;

3. Мәліметтер құрылымы;

4. Бағдарламалық қамтамасыз етудің архитектурасы;

5. Қолданушы интерфейсі (Windows-қосымша үшін);

6. Түсініктемесі бар код;

7. Тестілеу нәтижесі;

8. Бақылау сұрақтарына жауаптар.

Ескерту. Есептеу нәтижесі нұсқа бойынша жасалынатын қосымша үшін дайындалады.

1.1 – кесте - Жеке тапсырмалар

№ вар. | Тапсырма
1 | Пәндік сала: архитектура
2 | Пәндік сала: транспортные средства
3 | Комплекстік сандармен жұмыс
4 | Векторлармен жұмыс
5 | Графикалық примитивтер жүйесі
6 | Пәндік сала: аэрофлот
7 | Енгізушығару класстарының жүйесі.
8 | Пәндік сала: зоологиялық классификация
9 | Үлкен өлшемділік сандармен жұмыс
10 | Терезелік интерфейс жүйесі
11 | Полиномдармен жұмыс
12 | Пәндік сала: компьютер құрамалары
13 | Пәндік сала: геометрикалық фигуралар
14 | Стек және кезекпен жұмыс
15 | Пәндік сала: география
16 | Графикалық примитивтер жүйесі
17 | Пәндік сала: зоологиялық классификация
18 | Енгізушығару класстарының жүйесі.
19 | Терезелік интерфейс жүйесі
20 | Үлкен өлшемділік сандармен жұмыс
21 | Пәндік сала: компьютер құрамалары
22 | Полиномдармен жұмыс
23 | Стек және кезекпен жұмыс
24 | Комплекстік сандармен жұмыс
25 | Пәндік сала: геометрикалық фигуралар

Бақылау сұрақтары:

1. Объектілі бағытталған тәсілдің негізгі түсініктері?

2. Объект, класс дегеніміз не? Олардың арасында айырмашылық қандай?

3. Конструкторлар мен деструкторлар не үшін керек?

4. Виртуалды функцтя көмеігімен полиморфизм қалай іске асырылады?

5. Object Pascal’да көру аймақтарының директивалары?

6. Object Pascal’да мұрагерлік қалай жасалынады?

7. «Артық жүктелген» мен «жабылған» әдістерінің айырмашылығы?

8. Абстрактілі әдістер не үшін керек?

Терминология

Объектілі-бағытталған тәсіл. Объектілі-бағытталған (ОБ) тәсіл объектілі декомпозицияны қолданады, мұнда жүйенің статикалық құрылымы объектілер терминдары мен олар арасынсындағы байланыспен, ал жүйенің тәртібі олар арасындағы хаттар алмасу терминдерімен сипатталады.

Негіздер мен Объектілер

Анықтама бойынша объект деп, қарастырылатын қолданбалы мәселе төңірегінде мағынасы бар, шекаралары нақты белгіленген зат немесе абстракцияны түсінеміз. Объектілерді енгізу екі сақсатты көздейді:

 қолданбалы міндетті (мәселені) түсіну;

 Компьютерде іске асыру үшін негізді енгізу.

Г. Буч бойынша объект анықтамасы:

Объектінің қалпы, тәртібі және ұқсастығы болады; ұқсас объектілердің құоылымы олар үшін елассты анықтайды; «класс экземпляры» мен «объект» терминдері өзара алмастырушы.

А. Джекобсон бойынша объект анықтамасы:

Объект бұл өз қалпын (ақпаратты) сақтай алатын, және осыы қалпын өзгертумен тексеру үшін операциялар жиынтығын қамтамасыз ететін негіз.

Объект қалпы – объектінің қандайда бір шартты орындайтын, белгілі істі жасайтын немесе қандайда бір оқиғаны күтетін оқиғасы. Объект қалпы көбіне осы объекттің барлық қасиеті (әдетте статикалық) мен олардың мәндерінің тізімімен (әдетте динамикалық) сипатталады. Объект қалпы объектінің қасиетін бейнелейтін атрибуттарының ағымдағы мәнімен сипатталады. Атрибут болып тек қарапайым типтер ғана (сандар, логикалық мәндер) емес, сонымен қатар құрама типтер мен объектілер бола алады.

Тәртібі – бұл объектінің қалайша, әрекет жасап, жауап беруі; тәртіп объект қалпы менхабар беру терминдерінде көрсетіледі. Сәйкес реакцияны алу үшін бір объектінің екінші объектіге белгілі әсер етуі Операция деп аталады. Берілу механизмі түрлі болғанымен, негізінде хат және операция түсініктері сәйкесті. Smalltalk сияқты таза объектілі-бағытталған тілде олар арасында хат алмасу туралы айтылады. Өткен шақ нақты бейнеленетін C++ іспетті тілдерде біз бір объект басқа объект операциясын жасағанда оның әдісін шақыоады дейміз.

Объект қалайша қоршаған әлеммен қарымқатынасқа түсетініе бейнелеу объект интерфейсі деп аталады. Объект қалпы оның тәртібінің жиынтық нәтижесін көрсетеді.

Ұқсастық – объектінің басқалардан айырмашылығын көрсететін қасиет. Идентификация әдісі бір объектіні басқасынан қалай ажыратуға болады деген сұраққа жауап беруі тиіс. Көптеген объектілі модельдер объектілерді идентификациялаудың құрамдас әдістерін ұсынады.

Класстар

Класс – бұл құрылым мен тәртіп ортақтығымен байланысқан көптеген объектілер. Бір класс объектілердің бірдей интерфейсі бар және олар оны бірдкй әдіспен іске асырады. Бір класстың екі объектісі тек ағымадағы жағдайымен әр түрлі болуы мүмкін. Дара объектілер класс экземплярлары деп аталынады, ал класс бұл объектілер құрылатын «үлгі».

Объектілі-бағытталған тәсілдің маңызды түсініктері:

Абстрагирлау – қандайда бір объектіні басқалаодан ажырататын негізгі сипаттамасын ерекшелеу. Абстрагирлау объектінің сыртқы ерекшеліктеріне басты назар аудырады;

Инкапсуляция – (мәліметтерді жасыру немесе қатынауды шектеу) объекттің сыртқы әрекетін бейнелейтін интерфейсін ішкі жүзеге асырудан шектеу үшін қызмет етеді;

Полиморфизм – объектінің қай классқа жататынын білмейақ, онымен өзара іс әрекет жасау мүмкіндігі. Басқаша айтқанда, класстың басқа типке жату қабілеттілігі;

Мұрагерлік – класстар арасындағы бір класстың құрылым не тәртіпті басқа класспен бөлісу қарымқатынасы;

Класс өз ішіне басқа классты қосу мүмкін (қосылу не агрегирлану қатынасы), егер ол басқа класс объектілері болып табылатын атрибуттарын анықтаса (немесе басқа объектіге сілтемелер).

Object Pascal бағдарламалау тілі

Типтер жүйесі

Pascal Классикалық тілі программистке өзінің жеке күрделі мәліметтерін жазуларын (records) анықтауға мүмкндік береді. Object Pascal ОББ концепциясын қолдайды және класстарды анықтауға мүмкіндік береді:

TPerson = class

private

fname : string[15];

faddress : string[50];

public

procedure show;

end;

Класс мәліметтері өріс, процедуралар мен функциялар – әдістер дер аталынады. Delphiде қабылданған келісім бойынша, өріс атауларын f (ағылш. field – өріс) әрпінен бастау қажет. Бағдарламада класстарды сипаттауды типтер сипаттауға (type) орналастырады. Өріске қатынау бір бірінен нүктемен бөлінетін класс/объект/өріс атын көрсетумен іске асырылады.

Объектілер

Бағдарламада класстар өкілдері объектілер – айнымалыларды жариялау бөлімінде жарияланады (var):

var

Student : TPerson;

Professor : TPerson;

Ерекше назар аударатыны, Object Pascal’да объект – бұл динамикалық құрылым. Объект айнымалысы мәліметтер емес, объектінің мәліметтеріне сілтемелерден тұрады.
Сондықтан, программист бұл мәлісеттер үшін жадтың бөлінуін қамтпмпсыз ету керек.

Жадтың бөлінуі класстың арнайы әдісі – конструктор (әдетте оған create есімін береді). Конструктордың ерекше ролі мен тәртібін айшықтау үшін, классты сипаттағанда procedure сөзінің орнына constructor сөзі қоданылады:

TPerson=class

private

fname : string[15];

faddress : string[50];

constructor Create;

public

procedure Show;

end;

Объект мәліметтері үшін Жадтың бөлінуі нәтиженің мәнін конструктор-әдісі арқылы класс объектісіне меншіктеу жолымен іске асады. Төмендегі мысалда Professor объектісі мәліметтері үшін қажетті жад бөлінеді:

Professor := TPerson.Create;

Жадтың бөлінуінен басқа, конструктор объект өрістеріне бастапқы мәндерді беру мәселесін шешеді, яғни объект инициализациясын жасайды. Төмендегі мысалда TPerson классы үшін констукторды іске асыру көрсетілген:

constructor TPerson.Create;

begin

fname := ’’;

faddress := ’’;

end;

Констукторды іске асыру ерекше. Біріншіден, конструктор денесінде динамикалық жадтың бөлінуін қамтамасыз ететін үйреншікті new инструкциялары жоқ (осы қызметті компилятор жасайды). Екіншіден, конструктор мәндерді қайтармайды, алайда бағдарламада конструкторға жүгіну функция-әдісіндегідей болады.

Егер бағдарламада қандай-да бір объект қолданылмаса, онда жадты босатуға болады. Осы әрекетті орныдау деструктор (Destroy) қолданылады. Мысалы Professor объектісі өрістері алатын жадты босату үшін мынаны жазу керек:

Professor.Destroy;

Әдістер

Класс әдістері (класс сипаттамасына қосылған процедуралар мен функциялар) класс объектілерінен әрекет орындайды. Әдіс қолданылу үшін бір бірінен нүктемен бөлінген объект пен әдіс аттарын көрсету керек. Іс жүзінде әдісті объектіге қолданудың инструкциясы – бұл процедураны шақыру инструкциясын жазып алудың арнайы тәсілі. Мысалы инструкция

professor.Show;

Professor объектісіне show әдісінің қолданылуын шақырады.

Бағдарламада класс әдістері қарапайым процедуралар мен функциялар сияқты анықталады. Тек әдіс болып табылатын процедуралар мен функциялар атауы екі бөліктен (әдіс және сол әдіс жататын класс атауы) тұрып, олар нүкте арқылы бөлінеді. Төменде берілген TPerson классының show әдісін анықтау үлгісі көрсетілген:

procedure TPerson.Show;

begin

ShowMessage('Имя:' + fname + #13 + 'Адрес:' + faddress);

end;

Ескеретін жайт, әдіс инструкциясында объект өрістеріне қатынау объект атын енгізбей ақ жасалынады.

Объектінің қасиеті мен инкапсуляция

Инкапсуляция деп объектінің өрістеріне тек класстар әдістері арқылы қатынау үшін оларды жасыру деп түсіндіріледі.

Object Pascal-да объект өрістеріне қатынауды шектеу объект қасиеттері көмегімен жасалынады. Объект қасиеттері (property) Қасиеттің мәнін сақтайтын өріспен және қасиет өрісіне қатынауды қамтамасыз ететін екі әдіспен сипатталады. Қасиет мәнін қою әдісі қасиетті жазып алу әдісі (write) деп аталады, қасиет мәнін алу әдісі қасиетті оқу әдісі (read) деп аталады.

Классты сипаттауда қасиет аты алдында property сөзін жазады. Аттан кейін оның типінің, сосын қасиет мәніне қатынауды қамтамасыз ететін әдістер атаулары көрсетіледі. read сөзінен кейін қасиетті оқуға мүмкіндік беретін әдіс атауы, write сөзінен кейін – қасиет жазулары әдіс аты енгізіледі. Төменде Name және Address екі қасиеті бар TPerson классының сипатталуы көрсетілген:

type

TName=string[15];

TAddress=string[35];

TPerson=class

private

FName: TName;

FAddress:TAdress;

сonstructor Create (Name:TName);

procedure Show;

function GetName:TName;

function GetAddress:TAddress;

procedure SetAddress (NewAddress:TAddress);

public

property Name: TName read GetName;

property Address: TAddress read GetAddress write SetAddress;

end;

Сосын Student объектісінің Adress қасиетіне мән ьеру үшін келесі жазу орындалады:

student.Address := 'С.Петербург, ул.Садовая 21, кв.З';

Компилятор берілген мәнді беру инструкциясын әдісті шақыру инструкциясына қайтатранслирлайды:

student.SetAddress('С.Петербург, ул. Садовая 21, кв.З');

Сырттан бағдарламада қасиетті қолдану мен объект өрістерін қолданудан ажыратылмайды. Алайда олар арасыенда үлкен айырмашылық бар: Қасиет мәнін беру мен оқу кезінде бірталай жұмыысты орындайтын процедура шақырылады.

Бағдарламада қасиет әдістеріне қосымша міндеттерді жүктеуге болады. Мысалы әдіс көмегімен қасиетке берілетін мәндердің дұрыстығын тексеруге, басқалардың мәндерін беруге, қосымша процедураны шақыруға болады.

Жазып алудан қорғалған қасиет мәнін объект инициализациясы кезінде беруге болады. Төменде TPerson классының объектісін жасауды және қасиеттеріне қатынауды қамтамасыз ететін TPerson әдістері көрсетілген:

// TPerson объект конструкторы

сonstructor TPerson.Create(Name : TName);

begin

FName := Name;

end;

// Name қасиеттiнің мәнiн алу әдісі

function TPerson.GetName;

begin

Result:=FName;

end;

// қасиеттiнің мәнiн алу әдісі

function TPerson.GetAddress

begin

Result := FAddress;

end;

// Address қасиеттiнің мәнiн өзгерту әдісі

procedure TPerson.SetAddress(NewAddress : TAddress);

begin

if FAddress = ''

then FAddress := NewAddress;

end;

Объект мәліметтерін безендіру қасиеттей өрістерге қатынауды шектей алады, мысалы тек оқуға рұқсат беруге болады. Бағдарлама инструкциялары қасиет мәнін өзгерте алмау үшін қасиет сипаттамасында тек оқу әдісінің атын ғана көрсету керек. Тек оқуға арналған қасиетке мән берсе, компиляция периодының қателігіне әкеледі. Жоғарыда көрсетілген класс сипаттауында Name қасиеті тек оқуға, ал Address қасиеті – оқу және жазып алуға арналған.

TPerson классының жасалуы мен оның қасиетін орнатуды қамтамасыз ететін бағдарлама инструкциялары келесідей болуы мүмкін:

student := TPerson.Create('Иванов');

student.Address := 'ул. Садовая, д.3, кв.25';

Көру аймақтарының директивалары

Класс элементтерін (өріс, әдіс, қасиет) атаудан басқа, класс сипаттамасы өзіне класс элементінің бағдарламада көріну дәрежесін орнататын, protected (қорғалған) және private (жабық) директиваларын біріктіреді.

public секциясында аталған класс элементтері барлық класс пен модульдерге қол жетімді. Әдетте бұл секцияға бәріне ортақ класс қасиеттерінің сипаттамасын орналастырады.

protected секциясында аталған класс элементтері тек одан туған класстарды қол жетімді. Бұл секцияның класс элементтерінің көріну аумағы класс сипаттамасы болатын модульмен шектелмейді. Әдетте protected секциясына класс әдістерінің сипаттамасын енгізеді.

private секциясында аталған класс элементтері модуль ішінде көрінеді. Бұл элементтер модульдан тысқары жерде, тіпті туынды класстардың өзінде қолжетімсіз. Әдетте private секциясына класс өрістерінің сипаттамасын кіргізеді.

Төменде қатынауды басқару директивалары қосылған TPerson классының сипаттамасы көрсетілген.

TPerson = class

private

FName: TName; // Name қасиеттiнің мәнi

FAddress: TAddress; // Address қасиеттiнің мәнi

protected

Constructor Create(Name:TName);

Function GetName: TName;

Function GetAddress: TAddress;

Procedure SetAddress(NewAddress:TAddress);

Property Name: TName read GetName;

Property Address: TAddress read GetAddress write SetAddress;

end;

Кейде класс элементтерін толығымен жасыру керек болады. Бұл жағдайда, класстың анықтамасын жеке модульге, ал оған сілтемені осы класс объектілерін қолданатын бағдарламаға орнату керек.

Мұрагерлік

Объектілі-бағытталған Бағдарламалаудың концепциясы бар классқа жаңа өрістер, қасиеттер мен әдістерді қосу арқылы жаңа класстарды анықтау мүмкіндігін болжайды. О Сонда жаңа туындаған класс өзінің негізгі, түпкі классының қасиеттері мен әдістерін мұрагерлікке алады.

Ұрпақклассты жариялауда түпкі класс көрсетіледі. Мысалы, TEmployee (қызметші) классы жоғарыда тұрған TPerson классынан Department (бөлім) өрісін қосу арқылы туындауы мүмкін. Temployeeға хабарландыру келесідей болады:

TEmployee = class(TPerson)

FDepartment : integer; // бөлім номері

constructor Create(Name : TName; Dep : integer);

end;

Жақшаға кіргізілген TPerson классының (негізгі) аты TEmployee классының одан туындағанын көрсететеді.

TEmployee классының өзінің жеке конструкторы бар, ол негізгі класстың өз өрістерінен инициализациясын қамтамасыз етеді. Төменде конструкторды іске асырудың үлгісі:

constructor TEmployee.Create(Name : TName; Dep : integer);

begin

inherited Create(Name);

FDepartment := Dep;

end;

Берілген мысалда inherited директивасымен түпкі класстың конструкторы шақырылады, сосын ұопақ класс өрісіне атау беріледі. Өндірістік класс жасағаннан кейін бағдарламада негізгі класстың өрістері мен әдістерін қолдануға болады.

Онымен қоса, класс әдісінің ішінде әдісі аталынатын объектіге сілтеме болатын self кілттік сөзін қолдануға болады.

Өндірістік класстың объектісін жасағаннан кейін бағдарламада түпкі класстың әдістері мен өрістерін қолдануға болады. Төменде осы мүмкіндікті көрсететін бағдарлама фрагментісі берілген.

engineer := TEmployee.Create('Сидоров',413);

engineer.address := 'ул.Блохина, д.8, кв.10';

Бірінші инструкция TEmployee типті объект жасаса, екіншісі— түпкі классқа қатысты қасиетті белгілейді.

Полиморфизм және виртуалды әдістер

Полиморфизм концепциясы объект классына сәйкес келетін әдісті қолдануды қамтамасыз етеді. Үш класс анықталаған делік, біреуі қалған екеуі үшін негізгі болып табылады.

type
// негізгі класс TPerson

TPerson = class

FТame : string; { аты}

constructor Create(name : string) ;

function info: string; virtual;

end;

// негізі туындысында TPerson

TStud = class(TPerson)

FGr : integer; { топ номері }

constructor Create (name : string; gr: integer);

function info: string; override

end;

// негізі туындысында TPerson

TProf = class(TPerson)

FDep : string; { кафедра атыы }

constructor Create(name : string; dep : string);

function info: string; override;

end;

Бұл класстардың әрқайсысында info әдісі анықталған. virtual директивасының көмегімен info әдісі виртуалды болып жарияланған. Әдістің виртуалды болып аталуы туынды классқа оны өзінің әдісімен алмастыруға мүмкіндік береді (ол override директивасымен белгіленеді). Төменде әр класс үшін info әдісін анықтау көрсетілген:

function TPerson.info : string;

begin

result := '';

end;

function TStud.info : string;

begin

result := FName + ' гр.' + IntTostr(FGr);

end;

function TProf.info : string;

begin

result := fname + ' каф.' + FDep;

end;

Адамдардың тiзiмiн программада класстың объекттер массивімен көрсетуге болады TPerson

list : array[l..100] of TPerson;

Object Pascalдың Delphi тілі түпкі класстың нұсқағышына туынды класс нұсқағышынығ мәнін меншіктеп алуға мүмкіндік беретіндіктен, тізімді осылайша жария етуге болады. Сондықтан TStud және TProf класстарының объектілері list массивінің элемнттері бола алады.

Жабылған әдісте түпкі әдісті inherited директивасын қолданып шақыруға болады.

Екі аласс та бір түпкі класстан туындағандықтан, студенттер мен оқытушылардың тізімін келесідей жариялауға болады (мұнда объект — бұл нұсқағыш екенін еске түсіру қажет):

list: array[l..SZL] of TPerson;

Студенттер мен оқытушылардың тізімін info әдісін массив элементтеріне қолдану арқылы шығаруға болады:

st := '';

for i:=l to SZL do // SZL - размер массива-списка

if list[i] <> NIL then st := st + list[i].Info+ #13;

ShowMessage (st);

Бағдаоламаның жұмыс істеуі барысында массвтің әр элементі xstud және TProf типтерінің объектілерінен тұруы мүмкін.

Абстрактілі және артық жүктелген әдістер

Виртуалды әдістер сонымен қатар абстрактілі болуы мүмкін, бұл берілген класста әдістің жүзеге асырылуы мүмкін еместігін көрсетеді. Ол әдіс туынды класстарда іскеасырылкы тиіс. Абстрактілі әдісті сипаттау үшін virtual сөзінен кейін тұратын, abstract сөзі қолданылады.

Әдістер артық жүктелуі мүмкін – яғни бір атпен бірнеше әдістерді анықтауға болады (кілттік сөз соңында overload сөзін қосу арқылы):

function Min(A,B: Double): Double; overload;

function Min(A,B: Integer): Integer; overload;

Бұл хабарландыру түрлі параментрлерді қабылдайтын екі Min функциясы бар деп есептеу нәтижесініңтейді. Қажет функцияны таңдау, берілген параметрлерге байланысты, компилятормен жасалынады.

Delphi Класстары мен объектілері

Интерфейсті іске асыру үшін Delphi форманың түрлі компоненттерімен (командалық батырмалар, түзету өрістері) жұмыс істейтін класстар кітапханасын қолданады.

Қосымшаның формасын жобалау кезінде Delphi бағдарламаның мәтініне қажетті объектілерді автоматты қосады. Егер Delphi іске қосылғаннан кейін, бірден код редакторының терезесіне қарасақ, келесі жолдарды көреміз:

type

TForm1 = class(TForm)

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: Tform1

Бұл бастапқы класстың, қосымшаның бос формасының cипаттамасы және объектіні жариялау.

Программист қажетті компоненттерді қосып, форманы жасағанда, Delphi форма классының сипаттамасын құрастырады. Программист форма оқиғасын өңдеу функциясын немес оның компонентін жасағанда, Delphi қосымшаның формасының класс сипаттамасына әдістің жариялануын қосады.

Класстар кітапханасына визуалды компоненттер класстарынан басқа, сәйкесті объектілердің жасалуы мен олардың әдістеріне қатынауды қамтамасыз ететін визуалды емес (көрінбейтін) компоненттер класстары кіреді. Мұндай визуалды емес компоненттің мысалы ретінде таймерді (TTimer типі) және мәліметтер базасына қатынау мен басқару компоненттерін айтуға болады. Одан басқа көптеген класстар болады, алайды олардың қарастырылуы бұл жұмыстың міндетіне кірмейді.

Тапсырманы орындау үлгісі

Пәндік сала: «Ұшқыш аппараттар»

5.1 - сурет – Тапсырманың орындалу үлгісі

Object Pascalда консрльдық қосымшаны жасау үлгісі:

program Lab3op;

{$APPTYPE CONSOLE}

uses

SysUtils;

//

// Ұшқыш аппараттар (ЛА)

//

const

STORM = 7; // Қатты жел рұқсат етілмейді

MIN_HEIGHT = 500; // Бастапқы минималды ұзындығы

MIN_FUEL = 100; // Жанармайдың минималды өлшемі

type

// Кездесетін күйлерді беретін тапсырма тізімі

// Ұшқыш аппарат - "жерде" и "аспанда"

FlyingState = (onGround, inAir);

// Кездесетін күйлерді беретін тапсырма тізімі

// Қозғаушы - "тоқтатылды", "қосылды"

EngineState = (started, stopped);

//

// Класс: Ұшқыш аппарат (не ЛА)

//

FlyingMachine = class

private

name : string;

protected

state : FlyingState;

public

constructor Create; overload;

constructor Create(n: string); overload;

destructor Destroy; override;

// name жабық айнымалысына кіруге рұқсат ететін екі әдіс

procedure setName(n : string); virtual;

function getName : string; virtual;

procedure fly; virtual;

end;

//

// Класс: моторсыз ЛА планеры.

// Планер нақтылы биiктiкке басқа ұшақпен көтерiледi

// бұдан әрi өспелi әуа ағындарында булайды

//

Glider = class(FlyingMachine)

protected

windForce : integer;

startHeight : integer;

public

constructor Create(n : string);

procedure setWindForce(wf : integer); virtual;

function getWindForce : integer; virtual;

function getHeight() : integer; virtual;

procedure setHeight(h : integer); virtual;

procedure fly; override;

end;

//

// Класс: моторлы ЛА ұшағы.

//

Airplane = class(FlyingMachine)

protected

fuel : integer;

engine : EngineState;

public

constructor Create(n: string);

destructor Destroy; override;

procedure fly; override;

procedure addFuel(f : integer); virtual;

procedure ground(); virtual;

end;

//

// Класс операцияларын іске қосу

//

constructor FlyingMachine.Create;

begin

// Басқа құраушыны шақырамыз

Create('UFO');

end;

constructor FlyingMachine.Create(n: string);

begin

setName(n);

state := onGround;

WriteLn('FlyingMachine.Create ', name);

end;

destructor FlyingMachine.Destroy;

begin

WriteLn('FlyingMachine.Destroy ', name);

end;

procedure FlyingMachine.setName(n : string);

begin

name := n;

end;

function FlyingMachine.getName : string;

begin

getName := name;

end;

procedure FlyingMachine.fly;

begin

state := inAir;

WriteLn('FlyingMachine.fly ', name, ' Flying!');

end;

constructor Glider.Create(n : string);

begin

inherited Create(n);

windForce := 0;

startHeight := 0;

WriteLn('Glider.Create ', name);

end;

procedure Glider.fly;

begin

if (windForce < STORM) and (startHeight >= MIN_HEIGHT) then begin

WriteLn('Glider.fly ', name,

' Wind=', windForce, ' Height=', startHeight);

inherited fly;

end

else

WriteLn('Glider.fly ', name, ' Wind is too strong!');

end;

procedure Glider.setWindForce(wf : integer);

begin

windForce := wf;

end;

function Glider.getWindForce : integer;

begin

getWindForce := windForce;

end;

procedure Glider.setHeight(h : integer);

begin

startHeight := h;

end;

function Glider.getHeight : integer;

begin

getHeight := startHeight;

end;

constructor Airplane.Create(n: string);

begin

inherited Create(n);

engine := stopped;

fuel := 100;

WriteLn('Airplane.Create ', name);

end;

destructor Airplane.Destroy;

begin

WriteLn('Airplane.Destroy ', name);

if state = inAir then

ground;

if engine = started then begin

WriteLn('Airplane.Airplane ', name, ' Stop engine!');

engine := stopped;

end;

inherited Destroy;

end;

procedure Airplane.addFuel(f : integer);

begin

fuel := fuel + f;

WriteLn('Airplane.addFuel ', name, ' Fuel=', fuel);

end;

procedure Airplane.fly;

begin

if fuel > MIN_FUEL then begin

if engine = stopped then begin

engine := started;

WriteLn('Airplane.fly ', name, ' Start engine!');

end;

WriteLn('Airplane.fly ', name, ' Fuel=', fuel);

inherited fly;

fuel := fuel - 50;

end

else

WriteLn('Airplane.fly ', name, ' Not enough fuel!');

end;

procedure Airplane.ground();

begin

state := onGround;

WriteLn('Airplane.ground ', name, ' on the ground!');

end;

var

glide : Glider;

plane : Airplane;

a, b : FlyingMachine;

begin

WriteLn('************ Test Glider class ************');

WriteLn;

glide := Glider.Create('Scooter-FX12');

glide.setHeight(MIN_HEIGHT + 100);

glide.fly;

glide.Destroy;

ReadLn;

WriteLn('************ Test Airplane class ************');

WriteLn;

plane := Airplane.Create('TY-134');

plane.fly;

plane.addFuel(MIN_FUEL + 300);

plane.fly;

plane.fly;

plane.fly;

plane.ground;

plane.Destroy;

ReadLn;

WriteLn('************ Test classes ************');

a := Glider.Create('Glider-AQ23');

b := Airplane.Create('LA-46');

a.fly;

b.fly;

WriteLn('FlyingMachine name a=', a.getName);

WriteLn('FlyingMachine name b=', b.getName);

a.Destroy;

b.Destroy;

ReadLn;

end.

Бағдарламаның орындалу нәтижесі:

*** Тест класса Glider ***

FlyDevice::FlyDevice Scooter-FX12

Glider::Glider Scooter-FX12

Glider::fly Scooter-FX12 Высота=600 Сила Ветра=0

FlyDevice::fly Scooter-FX12 аспанда!

FlyDevice::~FlyDevice Scooter-FX12

*** Airplane класының тестісі ***

FlyDevice::FlyDevice TY-134

Airplane::Airplane TY-134

Airplane::fly TY-134 Жанармай жетіспейді!

Airplane::addFuel TY-134 Жанармай =400

Airplane::fly TY-134 Қозғаушыны қосу

Airplane::fly TY-134 Жанармай =400

FlyDevice::fly TY-134 аспанда!

Airplane::fly TY-134 Жанармай =350

FlyDevice::fly TY-134 аспанда!

Airplane::fly TY-134 Жанармай=300

FlyDevice::fly TY-134 аспанда!

Airplane::ground TY-134 Қонады

Airplane::~Airplane TY-134 Қозғаушыны тқтату

FlyDevice::~FlyDevice TY-134

*** Класстардың полиморфизм тестісі ***

FlyDevice::FlyDevice Glider-AQ23

Glider::Glider Glider-AQ23

FlyDevice::FlyDevice LA-46

Airplane::Airplane LA-46

Glider::fly Glider-AQ23 Ұшуға қолайсыз жағдай

Airplane::fly LA-46 Жанармай жетіспейді!

Имя объекта a = Glider-AQ23

Имя объекта b = LA-46

FlyDevice::~FlyDevice Glider-AQ23

Airplane::~Airplane LA-46

FlyDevice::~FlyDevice LA-46

Бағдарламаның орындалу нәтижесі:

************ Test Glider class ************

FlyingMachine.Create Scooter-FX12

Glider.Create Scooter-FX12

Glider.fly Scooter-FX12 Wind=0 Height=600

FlyingMachine.fly Scooter-FX12 Flying!

FlyingMachine.Destroy Scooter-FX12

************ Test Airplane class ************

FlyingMachine.Create TY-134

Airplane.Create TY-134

Airplane.fly TY-134 Not enough fuel!

Airplane.addFuel TY-134 Fuel=500

Airplane.fly TY-134 Start engine!

Airplane.fly TY-134 Fuel=500

FlyingMachine.fly TY-134 Flying!

Airplane.fly TY-134 Fuel=450

FlyingMachine.fly TY-134 Flying!

Airplane.fly TY-134 Fuel=400

FlyingMachine.fly TY-134 Flying!

Airplane.ground TY-134 on the ground!

Airplane.Destroy TY-134

Airplane.Airplane TY-134 Stop engine!

FlyingMachine.Destroy TY-134

************ Test classes ************

FlyingMachine.Create Glider-AQ23

Glider.Create Glider-AQ23

FlyingMachine.Create LA-46

Airplane.Create LA-46

Glider.fly Glider-AQ23 Wind is too strong!

Airplane.fly LA-46 Not enough fuel!

FlyingMachine name a=Glider-AQ23

FlyingMachine name b=LA-46

FlyingMachine.Destroy Glider-AQ23

Airplane.Destroy LA-46

FlyingMachine.Destroy LA-46

Сабаққа дайындалуға арналған әдістемелік нұсқаулар

Әдебиеттер:

1 Покушалова, Л.В. Метод case - study как современная технология профессионально-ориентированного обучения студентов [Текст] / Л.В. Покушалова // Молодой ученый. —2011. —No5. Т.2. —С. 155-157.

2 Романов П.В. Стратегия кейс-стади в исследовании социальныхслужб//Социс,2005, No4, с 101-109.6.

3 Фливберг, Б. Кейс-стади в контексте качественно-количественнойпроблематики: Ст. из Дании] / Б. Фливберг // Социологические исследования. -2004. -No 9. -С. 15 –

4 Гагарина, Л.Г. Разработка и эксплуатация автоматизированных систем: учеб. пособие/ Л.Г. Гагарина, Д.В. Киселев, Е.Л. Федотова; ред. Л.Г. Гагарина. - М.: Форум: ИНФРА-М, 2011. - 384с. 2. Пирогов, В.Ю. Информационные системы и базы данных: организация и проектирование: учеб. пособие для вузов/ В.Ю. Пирогов. - СПб. : БХВ-Петербург, 2009. - 528 с. 3.

5 Фуфаев, Д.Э. Разработка и эксплуатация автоматизированных информационных систем : учеб. Для студ. сред. проф. образования/ Д.Э. Фуфаев, Э.В. Фуфаев. - М.: Академия, 2010. - 304 с.б)

6 Федорова, Г.Н. Информационные системы : учебник/ Г.Н. Федорова. - 2-еизд., испр. - М.: Академия, 2011. - 208 с.

Қосымша:

7 Ларман К. Применение UML и шаблонов проектирования. 2-е издание.: Пер. с англ. – М.: Издательский дом “Вильямс”, 2002. – 624 с.: ил.

8 Калянов Г.Н. CASE-технологии: Консалтинг в автоматизации бизнес-процессов. 2-е изд. перераб. и доп. - М.-Горячая линия – Телеком, 2000.-320 с.

9 Вендров А.М. Проектирование программного обеспечения экономических информационных систем. Учебник. М.: Финансы и статистика, 2000.

10 Александров, Д.В. Инструментальные средства информационного менеджмента. CASE-технологии и распределенные информационные системы : учебное пособие / .В.Александров. -М. : Финансы и статистика, 2011. -225 с. -ISBN 978-5-279-03475-8;

11 http://www.bookwebmaster.narod.ru/uml.html

12 http://wm-help.net/books-online/book/57663/57663-53.html

Зертханалық жұмыс №8

Интерфейстер

Жұмыстың мақсаты:

1. Жүзеге асыру диаграммаларын салып үйрену.

Өз бетінше дайындалуға арналған тапсырма:

1. Әзірленетін жүйе сәулетін анықтау;

2. Бағдарламалық компоненттер арасында тәуелділікті орнату;

3. Компоненттер диаграммасын әзірлеу;

4. Компоненттер диаграммасын салу және кеңсе тауарларына тапсырыс бойынша қолданба жобасын жасау мысалында Орналастыру технологиясын зерделеу ( ппо (кп).doc файлды қараңыз);

5. Компоненттер диаграммасын әзірлеу және UML тілінде Орналастыру технологиясын зерделеу;

6. Компоненттер диаграммасын салу және Ratoinal Rose бағдарламасында Орналастыру процесін зерделеу;

7. Жобаланатын бағдарламалық жүйеге «Эскиздік жоба» құжатын дайындау (оның толық көлемінің 100%).

##

## Жұмыстың мазмұны:

1. ДК №7 жаттығуды орындау;

2. ДК №8 жаттығуды орындау;

3. ДК №9 немесе №10 жаттығуды орындау;

4. Нұсқа бойынша жобаланатын бағдарламалық жүйе үшін Компоненттер және Орналастыру диаграммасын жасау.

##

## Есеп беру мазмұны:

1. Әзірленген Компоненттер мен Орналастыру диаграммаларын келтіру;

2. Берілген диаграммалардың әрбір элементін сипаттау.

##

## Әдістемелік нұсқаулар

Интерфейстер

Компоненттер диаграммасының келесі элементі интерфейстер болып табылады. Соңғылары бұрын бірнеше рет қарастырылды, сондықтан мұнда олардың компоненттер диаграммасында түсіндіруге тән ерекшеліктері белгіленеді. Жалпы жағдайда интерфейс графиктік түрде шеңбермен бейнеленеді, ол компонентпен стрелкасыз сызық кесіндісі арқылы қосылатыны еске саламыз (3.1, а-сурет). Осы кезде міндетті түрде "I" бас әрпінен басталуы тиіс интерфейс атауы шеңбермен қатар жазылады. Семантикалық түрде сызық интерфейстің жүзеге асырылуын білдіреді, ал компонентте интерфейстердің болуы, берілген компонент интерфейстердің сәйкес жинағын жүзеге асыратыын білдіреді.

6.3-сурет - Компоненттер диаграммасында интерфейстерді графиктік белгілеу

Компоненттер диаграммасында интерфейсті түсіндірудің басқа тәсілі оны "интерфейс" стереотипі және атрибуттар мен операциялардың ықтимал секциялары бар кластың тік бұрышы түрінде бейнелеу болып табылады (5.58, б-сурет). Ережеге сай, осы белгілеу нұсқасы интерфейстің ішкі құрылымын түсіндіру үшін пайдаланылады, ол жүзеге асыру үшін маңызды болуы мүмкін. а

Бағдарламалық жүйелерді жүзеге асыру кезінде интерфейстер түрлі нұсқалардың үйлесімділігін ғана емес, сондай-ақ бағдарламаның бір бөлігіне, оның басқа бөліктерін өзгертпестен, айтарлықтай өзгерістер енгізу мүмкіндігін де қамтамасыз етеді. Осылайша интерфейстерді тағайындау, жүйені пайдаланушылармен (актерлермен) өзара әрекеттесу спецификациясына қарағанда айтарлықтай кең.

Интерфейстердің жеке компоненттермен пайдалану сипаты ерекшеленуі мүмкін. Сондықтан интерфейс пен компонент байлаысының екі тәсілін ажыратады. Егер компонент кейбір интерфейсті жүзеге асыратын болса, онда мұндай интерфейсті экспортталатын деп атайды, себебі осы компонент оны басқа компоненттерге сервис ретінде түсіндіреді. Егер де басқа компонент жүзеге асыратын кейбір интерфейсті пайдаланатын болса, онда осындай интерфейс бірінші компонент үшін импортталатын деп аталады. Импортталатын интерфейс ерекшелігі, компоненттер диаграммасында осы қатынас тәуелділік көмегімен бейнеленеді.

Тәуелділіктер. Жалпы жағдайда тәуелділік қатынасы бұрын қарастырылды. Тәуелділік ассоциация болып табылмайды, модельдің бір элементінің өзгеруі модельдің басқа элементіне әсер ететін немесе өзгертуге алып келетін кезде, осындай байланыстың болу фактісін ғана түсіндіру үшін қызмет ететінін еске салайық. Компоненттер диаграммасында тәуелділік қатынасы клиенттен (тәуелді элементтен) шығу көзіне (тәуелсіз элементке) бағытталған стрелкасы бар үзік сызықпен бейнеленеді.

Объектілік код компиляциясы мен генерациясы кезеңінде бағдарлама модульдерінің байланысын бейнелей алады. Басқа жағдайда тәуелділік тәуелсіз компонентте кластар сипаттамасының болуын бейнелей алады, олар тәуелді компонентте сәйкес объектілерді жасау үшін пайдаланылады. Компоненттер диаграммасына қатысты тәуелділіктер компоненттерді және осы компоненттер импорттайтын интрефейстерді, сонымен қатар компоненттердің алуан түрлерін өзара байланыстыра алады.

Бірінші жағдайда компонент-клиенттен импортталатын интерфейске қарай стрелка салады (6.4-сурет). Осындай стрелканың болуы, компонент сәйкес интерфейсті жүзеге асырмайтынын, оны өзінің орындалу процесінде пайдаланатынын білдіреді. Оның үстіне осы диаграммада осы интерфейсті жүзеге асыратын басқа компонент қатысуы мүмкін. Сонымен, мысалы төменде бейнеленген компоненттер диаграммасының көрінісі "main.exe" атауы бар компонент I Dialog импортталатын интерфейске тәуелді екендігі туралы ақпарат береді, оны өз кезегінде "image.java" атауы бюар компонент жүзеге асырады. Осы интрефейстің екінші компоненті үшін экспортталатын болып табылады.

6.4-сурет - .тәуелділік қатынасындағы компоненттер диаграммасының көрінісі

"image.java" атауымен екінші компонентті ескерту нұсқасы түрінде, осы компоненттің интерфейсті жүзеге асыратын фактісіне қарай бейнелеуге болмайтыны байқаймыз.

Компоненттер диаграммасы тәуелділік қатынасының басқа жағдайы компоненттардің әр түрлері арасындағы қатынас болып табылады (6.5-сурет). Осындай тәуелділіктің болуы, бағдарламалардың немесе динамикалық кітапханалардың бастапқы мәтіндеріне өзгерту енгізу компоненттің өзінің өзегруіне алып келетіні білдіреді. Осы кезде өзгерту сипаты қосымша белгіленуі мүмкін.

6.5-сурет – Компоненттер арасында тәуелділіктер қатынасын графиктік бейнелеу

Соңында, компоненттер диаграммасында компоненттер мен оларда жүзеге асырылған кластар арасында тәуелділік қатынасы берілуі мүмкін. Бұл ақпараттың жүйе моделінің логикалық және физикалық түсініктерін келістіруді қамтамасыз ету үшін маңызды мәні болады. Кластарды сипаттау құрылымындағы өзгерістер компоненттің өзгеруіне алып келуі мүмкін. Төменде кейбір компонент сәйкес кластарға тәуелді болған кезде ұқсас тектегі тәуелділік көрінісі келтіріледі.

6.6-сурет - Компоненттер мен кластар арасында тәуелділікті графиктік бейнелеу

Берілген жағдайда компоненттер диаграммасынан, кластардың осы компонентпен жүзеге асырылғаны шықпайтынын байқаған жөн. Егер кейбір компонент жеке кластарды жүзеге асыратынын атап өту талап етілетін болса, онда компонентті белгілеу үшін тік бұрыштың кеңейтілген символы пайдаланылады. Осы кезде компонент тік бұрышы горизонталь сызықпен екі секцияға бөлінеді. Жоғарғы секция - компонент атауын жазу үшін, ал төменгі секция – қосымша ақпаратты көрсету үшін қызмет етеді (6.7-сурет).

6.7-сурет - Компоненттің өздері жүзеге асыратын кластар туралы қосымша ақпараты бар графиктік бейнесі

Компонент символының ішінде графиктік нотацияның, кластар (тип деңгейінің компоненті) немесе объектілер (дана деңгейінің компоненті) сияқты басқа элементтері бейнеленуі мүмкін. Сонымен, мысалы, төменде бейнеленген компонент (6.8-сурет) дана болып табылады және үш жеке объектіні жүзеге асырады.

6.8-сурет – Жеке объектілерді жүзеге асыратын дана деңгейі компонентінің графиктік бейнеленуі

Жеке компонент-данада болатын объектілер берілген компонент символына енгізілген түрде бейнеленеді. Ұқсас енгізілгендік, компонентті орындау сәйкес объектілерді орындауға алып келетінін білдіреді. Басқаша айтқанда, бағдарламаны орындау уақыты ішінде компоненттің болуы оған салынған барлық объектілердің болуын, мүмкін болса, қол жетімділігін қамтамасыз етеді. Осы объектілерге қол жетімдігіне қатысты айтсақ, онда ол пакеттердің көрінерлігіне ұқсас көрінерлік квантификаторларының көмегімен қосымша спецификациялана алады. Көрінерліктің мазмұнды мағынасы пакеттердің әр түрлері үшін ерекшелене алады.

Сонымен бағдарламаның бастапқы мәтіні бар компоненттер үшін көрінерлік бағдарламалардың сәйкес мәтіндеріне одан әрі оларды қайта компиляциялай отырып өзгертулер енгізу мүмкіндігін білдіруі мүмкін. Бағдарламаның орындалатын коды бар компоненттері үшін көрінерлік сәйкес компонентті орындауға қосу немесе онда жүзеге асырылған операцияларды немесе әдістерді шақыру мүмкіндігін сипаттай алады.

## Rational Rose ортасында компоненттер диаграммасын әзірлеу

Компоненттер диаграммасы модельді физикалық түсіндіру бөлігі болып табылады және ООАП процесінде маңызды роль атқарады. Компоненттер диаграммасын белсендіру келесі тәсілдерінің бірімен орыдалуы мүмкін:

 Стандартты инструменттер панелінде компоненттер диаграммасын бейнелеу арқылы батырмада шерту;

 Браузерде (Component View) компоненттік түсіндіруді өрбіту және Main (Главная) пиктограммасында екі рет шерту;

 Browse-»Component Diagram (Браузер-» Компоненттер диаграммасы) меню пункті арқылы.

Компоненттер диаграммасын белсендіргеннен кейін арнайы инструменттер панелі келесі түрге келеді (6.9-сурет).

6.9-сурет - Компоненттер диаграммасына арналған арнайы инструменттер панелінің сыртқы түрі.

Элементтерді қосу және алу ұқсас жүреді, алайда әрбір компонент үшін стереотип, бағдарламалау тілі, декларациялар, кластар сияқты түрлі тетіктерді аықтауға болады. Компоненттердің осы тетіктерімен жұмысы контекстік менюді шақырғаннан кейін қол жетерлік компонент спецификациясы арқылы жүзеге асырылады.

Төменде компоненттер диаграммасы элементтерін графиктік бейнелеу мысалы келтіріледі (6.10-сурет).

Компоненттер диаграммасымен жұмыс кезінде пакеттер мен компоненттер жасауға, олардың спецификациясын және диаграмманың түрлі элементтері арасындағы тәуелділіктерді өзгертуге болады. Компонентте кластарды жүзеге асыруды бекіту кезінде браузерде класты бөліп алуға және оны диаграмманың керекті компонентіне тасымалдауға болады.

Rational Rose ортасында өрбіту диаграммасын әзірлеу.

Өрбіту диаграммасы модельді физикалық түсіндірудің екінші құрамды бөлігі болып табылады. Өрбіту диаграммасын белсендіру келесі тәсілдердің бірімен орындалуы мүмкін:

 Стандартты инструменттер панелінде өрбіту диаграммасын бейнелеу арқылы батырманы шерту;

 Браузерде (Deployment View) өрбітуді түсіндіруді екі рет шерту (Deployment View);

 Browse-»Deployment Diagram (Браузер-»Өрбіту диаграммасы) меню пункті арқылы.

6.10-сурет - Rational Rose ортасында компоненттер диаграммасын графиктік бейнелеу мысалы

Өрбіту диаграммасын белсендіргеннен кейін арнайы инструменттер панелі келесі түрге ие болады (6.11-сурет).

6.11-сурет - Өрбіту диаграммасы үшін арнайы инструменттер панелінің сыртқы түрі

Өрбіту диаграммасымен жұмыс процессорлар мен құрылғыларды, олардың спецификациясын жасаудан, олардың арасындағы байланыстарды орнатудан, сонымен қатар процестер қосу мен спецификациядан тұрады. Жеке процессорларға қатысты стереотиптерді пайдалануға болады.

Төменде өрбіту диаграммасын графиктік бейнелеу мысалы келтіріледі (6.12-сурет).

Rational Rose ортасының анағұрлым зор қасиеттерінің бірі модельді салғаннан кейін бағдарламалық кодты туындату мүмкіндігі болып табылады. Бұрын атап өтілгендей, бағдарлама мәтінін бағдарламалаудың сол немесе басқа тілінде туындату мүмкіндігі Rational Rose нұсқасын орнатуға байланысты.

6.12-сурет - Rational Rose ортасында өрбіту диаграммасын графиктік бейнелеу мысалы

Бұл үшін орындауға қажетті әрекеттердің жалпы реттілігі алты кезеңнен тұрады:

1. Тілді таңдауға тәуелсіз кодты туындату моделін тексеру;

2. Кластарды жүзеге асыру үшін компоненттер жасау;

3. Кластардың компоненттерге бейнеленуі;

4. Бағдарламалық код туындату қасиеттерін бекіту;

5. Класты, компонентті немесе пакетті таңдау;

6. Бағдарлама кодын туындату.

Кезеңдердің әрқайсысын орындау ерекшелігі тілді таңдауға байланысты өзгеруі мүмкін. Rational Rose ортасында жеке кластарды да, сондай-ақ тұтас жобаны сипаттайтын қасиеттердің жеткілікті түрде көп санын беру қарастырылды.

Компоненттер диаграммасын салу бойынша ұсыныстар

Компоненттер диаграммасын әзірлеу жүйе моделін логикалық түсіну туралы да, сондай-ақ оның физикалық жүзеге асырылу ерекшеліктері туралы да ақпаратты пайдалануды болжайды. Әзірлеу басталғанға дейін жүйені жүзеге асыру болжанатын есептеу платформаларын және операциялық жүйелерді таңдау туралы, сонымен қатар нақты деректер базаларын және бағдарламалау тілдерін таңдау туралы шешім қабылдау қажет.

Бұдан кейін компоненттер диаграммасын жалпы құрылымдауға кірісуге болады. бірінші кезекте, бағдарламалық жүйе қандай физхикалық бөліктерден (файлдардан) тұратын шешу қажет. Осы кезеңде компоненттердің тиімді декомпозициясы есебінен кодты қайтадан пайдалану мүмкіндігін ғана емес, сондай-ақ объектілерді тек қажет болған кезде құруды қамтамасыз ететін жүйені жүзеге асыруға назар аударған жөн.

Әңгіме, бағдарламалық жүйенің жалпы өнімділігі оның есептеу ресурстарын тиімді пайдалануына айтарлықтай тәуелді екенідігі туралы болады. Осы мақсатта кластарды және олардың операциялары мен әдістерді сипаттаудың үлкен бөлігін, орындалатын компоненттерде бағдарламаны инициалдауға ең қажетті бағдарламалық код көріністерін ғана қалдырып, динамикалық кітапханаға шығару қажет.

Жүйеі физикалық түсіндіруді жалпы құрылымдаудан кейін модельді интерфейстермен және деректер базасы сұлбаларымен толықтыру қажет. Интерфейстерді әзірлеу кезінде бағдарламалық жүйенің түрлі бөліктерін үйлестіруге (түйістіруге) азар аударған жөн. Модельге деректер базасының сұлбасын енгізу жеке кестелер спецификациясын және кестелер арасында ақпараттық байланыстарды орнатуды болжайды.

Соңында, компоненттер диаграммасын жасаудың соңғы кезеңі диаграммаға компоненттер арасында өзара байланыстар, сонымен қатар жүзеге асыру қатынасын орнатумен және салумен байланысты. Осы қатынастар жүйені физикалық жүзеге асырудың барлық маңызды аспектілерін, бағдарламалардың бастапқы мәтіндерінің компиляция ерекшеліктерінен бастап және бағдарламаның жеке бөліктерін оны орындау кезеңінде орындаумен аяқтап көркемдеуі керек. Осы мақсат үшін компоненттердің графиктік бейнесінің әр түрлерін пайдалануға болады.

Компоненттер диаграммасын әзірлеу кезінде UML тілінде модельдерді жасаудың жалпы принциптерін ұстанған жөн. Жеке алғанда бірінші кезекте UML тілінде болатын компоненттер мен стереотиптерді пайдалану қажет. Типтік жобалардың көпшілігі үшін осы жинақ компоненттерді жәе олардың арасындағы тәуелділіктерді түсідру үшін жеткілікті болуы мүмкін.

Егер де жобада UML тілінде сипттауы болмайтын кейбір физикалық элементер болса, онда кеңейту механизмін пайдаланған жөн. Жеке алғанда, жеке типтік емес компоненттер үшін қосымша стереотиптерді немесе олардың жеке сипаттарын нақтылау үшін белгілеген мәндерді пайдалану керек.

Қорыта келе, компоненттер диаграммасы, ережеге сай, өрбіту диаграммасымен бірлесіп әзірленетініне назар аударған жөн, онда бағдарламалық жүйенің компоненттерін оның бөлек түйіндері бойынша физикалық орналастыру туралы ақпарат беріледі.