Пәннің мақсаты мен міндеттері: Мақсаты: Оқупәні – «сase құралдары көмегімен ақпараттық модельдеу»



бет115/117
Дата01.04.2024
өлшемі5.25 Mb.
#497142
1   ...   109   110   111   112   113   114   115   116   117
case docx (1)

Зертханалықжұмыс12.


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

RationalRose98кодгенерациясынүйрену.


Үлкенкласстардыжобалаукереккездебарлықөңдеушілерахуалғатапболады.Қолмен енгізгенде және хабарлағанда келесілер болады: біріншіден,есепті қоюшы ереже бойынша не істеу керектігін сөз жүзінде немесе қағазжүзіндеайтады,екіншіден,жүйеніқұрушыөңдеушіпрограммалықкодсүйемелдеу керек түсініктемелерді көп жағдайда ескермейді. Rational Roseкодгенерациялаушыжүйесіжобалаудыңбасқақұрылғыларыменбіргепрограммалыққамтаманыңөңдеу процесінрөлдері,қызметтері жәнет.бқатаңбөлінгенөндірістікпроцесссияқтықұруғамүмкіндікбереді.Мақсаттарды көрсету үшін бір ғана классты жобалау жеткілікті. Оны Stringдепатайық.Оныңміндетінемассивтердегінегізгіоперацияларкіруікерек(басыпшығару,көшіру,салыстыру,өлшемдіалу).Мысалретіндеберілген класстыC++-тесипаттаймыз:
Class StringProtected:
Char*TmpString;
Public:
Int Counter;IntStat;
IntGetStringSize(Cliar*);IntPrintString(Char*);
Int CmpString(Cliar *, Char *);IntCpyString(Char*,Char *);}

Енді Rose құралдарыменбарлығынграфикалықтүрдежобалаймыз. Әрбіратрибуттүсініктемелеріменжекеберіледіжәнетипжазылады(public,protected,private).15.1сурет





    1. сурет

Осындайжолменбарлықайнымалыларжазылады.Функциянысипаттаукезінде барлығы ұқсас, тек функцияның өзін сипаттаудан өзге (қайтарылатынмәнніңтипі)нақтытүсініктемелердіберіпәрбіркіріспараметрлерініңерекшелігінжазукерек.Rationalкомпаниясыныңбарлықөнімдеріндеақырында басшылыққа көрсету үшін немесе өңдеушіге техникалық тапсырмаретінде беру үшін есепті генерациялау кезінде құжатты қолмен жеткізудіңқажетіболмайтындықтанкішігірімоперациялардыңбарлығынатүсініктемелер беру бекітілген.Жоғарыда көрсетілген әрекеттердің нәтижесіболып класстың көрсетілген ерекшеліктерімен пайда болуы болып табылады.Rational Rose 98 дайын кодты бере алмайды, ол жай ғана классты жобалайалады және әрбір элементтің ерекшеліктерін жаза алады, класс мүшелерінеары қарай кодпен толтыруы үшін үлгі бере алады. АлC++-те жұмыс кодын100 %-ды генерациялау үшінберілген жағдайда қарастылырмайтын RationalRose RealTime қолданылады. Сонымен, кодгенерациясынаоралайық(анығырақ,классгенерациясына).Меню(Tools)жүйесіарқылыжобаланатынкласстысипаттауүшінқолданылатынтілдітаңдаймыз,CodeGenerational-ды шақырамыз.






    1. сурет

НәтижесіболыпMyString.hжәнеMyString.cppфайлдарыныңпайдаболуытабылады.Біріншісінде класстың өзі жазылады, ал екіншісісәйкескодпен толтырылуы үшін үлгі болып табылады.Төменде екі файлдың дажазылуы көрсетіледі.Келтірілген түгел материал жөндеулердің өзгеруінсізжәне қосымша түзетусіз алынған. Бұндай үлгіге ие бола отырып,қандайөңдеуші класс логикасын кодтауды бастағаны маңызды емес болып қалады.Ары қарайкласс бойынша нақты есепті немесе техникалық тапсырманы алуүшінRationalSoDAқұралынпайдалануғаболады.КелесіRationalRoseорындайалатынтапсырмаәрекеттегіжүйеніталдау.Егербаркодтанвизуалдымодельдіқұрастыруғаболатынжәнеқажеттіқасиеттердіжәнеатрибуттардыаяғынадейінвизуалдыжазуға,жаңакласстардыжазуғамүмкіндік беретін қайта жобалау функциясын қолдануға болса, онда көлемдіжүйелерді жаңадан қайта жазып және құжаттапкерегі жоқ.Ал соңындабағдарламалаушыныңарықарайғыжұмысыүшінбарлықфайлдардыгенерациялауқажет.БұндайтәсілRound-TripдепаталадыжәнеRationalRose-татүгелбар.


Тапсырма

  1. Бірнешекласстаржүйесіүшін кодтыгенерациялаужәне модельменалынған негізгікодтысалыстыру.

  2. Код генерация мысалыФайл MyString.h

//##beginmodule%1.3%.codegen_versionpreserve=:yes
//ReadthedocumentationtolearnmoreaboutC+-)-codegeneratorversioning.
//##endmodule%1.3%.codegen_version

//##beginmodule%395AF70D0321.cmpreserve=no


//%Х%%Q%%Z%%W%
//##endmodule%395AF70D0321.cm
//##beginmodule%395AF70D0321.cppreserve=no/
/##end module%395AF70D0321.cp
//##Module:MyString%395AF70D0321;PseudoPackagespecification
//##Sourcefile:C:\ProgramFiles\Rational\Rose\C++\source\MyString.h#ifndefMyString_li
#defineMyString h1
//##beginmodule%395AF70D0321.additionalIncludespreserve=no
//##endmodule%395AF70D0321.additionalIncludes
//##beginmodule%395AF70D0321.includespreserve=yes
//##endmodule%395AF70D0321.includes
//##begin module%395AF70D0321.additionalDeclarations preserve=yes
//##endmodule%395AF70D0321.additionalDeclarations
//##beginMyString%395AF70D0321.prefacepreserve:=yes
//##endMyString%395AF70D0321.preface
//## Class: MyString%395AF70D0321 // Данный класс позволяетпроводитьразличные операции //надмассивамисимволов.
//##Category:<Тор Level>
//##Persistence:Transient//ФФCardinality/Multiplicity:nclassMyString
{
//##beginMyString%395AF70D0321.initiaroeclarationspreserve=yes
//##//ФФendMyString%395AF70D0321.initialDeclarations

public:
//##Constructors(generated)MyStringO;


//## Destructor (generated) –MyStringO;
//##AssignmentOperation(generated)
MyString&;operator=(constMyStringfcright);/
/##EqualityOperations(generated)
int operator==(const MyString &right) const;intoperator!=(constMyStringbright)const;
//##OtherOperations(specified)
//##Operation:GetStringSize%395AF87900E9
// Подсчитывает количество символов в переданном массиве IntGetStringSize(Char*massiv// Указательнамассив
);
//##Operation:PrintString%395AF88800B9
//Печатаетнаэкранепереданныймассив
IntPrintString(Char*Massiv//Указательнамассив);
//##Operation:CmpString%395AF892013F
//Сравниваетдвамассива.
Int CmpString (Char *Strl, // Указатель на первый массивChar*Str2 //Указатель навтороймассив);
//##Operation:CpyString%395AF89C00D5
//Копируетодинмассиввдругой
IntСруString(Char*Dest,//НазначениеChar*Source//Источник);
//##GetandSetOperationsforClassAttributes(generated)
//##Attribute:Stat%395AF8BB0289
//ОбщедоступнаяпеременнаячислаобращенийкPrintStringconst Intget _St at()const;
voidset_Stat(Intvalue);
//##Attribute:Count%395AF8C20148
//Определяетстатусопределенногообъектаconst Intget_Count ()const;
voidset_Count(Intvalue);
//AdditionalPublicDeclarations
//##beginMyString%395AF70D0321.publicpreserve^^yes
//##endMyString%395AF70D0321.publicprotected:
//AdditionalProtectedDeclarations
//##beginMyString%395AF70D0321.protectedpreserve==yes
//#7^ end MyString%395AF70D0321.protectedprivate:
//##GetandSetOperationsforClassAttributes(generated)
//##Attribute:TmpString%395AF8B201E5
//Временныйуказательнастроковыймассив.Можноиспользовать
//вкачествебуфера
constChar*get_TmpString()const;voidset_TmpString(Char*value);
//AdditionalPrivateDeclarations
//##beginMyString%395AF70D0321.privatepreserve==yes
//##endMyString%395AF70D0321.private
private:
//##implementation
//DataMembersforClassAttributes
//##beginMyString::TmpString%395AF8B201E5.attrpreserve=no
//private:Char*UChar*TmpString;
//##endMyString::TmpString%395AF8B201E5.attr
//##beginMyString::Stat%395AF8BB0289.attrpreserve^nopublic:IntUInt Stat;
//##endMyString::Stat%395AF8BB0289.attr
//## begin MyString::Count%395AF8C20148.attr preserve=:no public: Int UInt Count;
//##endMyString::Count%395AF8C20148.attr
//AdditionalImplementationDeclarations
//##beginMyString%395AF70D0321.implementationpreserve=yes
//##endMyString%395AF70D0321.implementation};
//##beginMyString%395AF70D0321.postscriptpreserve=yes
//##endMyString%395AF70D0321.postscript
//ClassMyString//i^i^GetandSetOperationsforClassAttributes(inline)inlineconst Char*MyString::get_TmpString()const {
//## begin MyString::get_TmpString%395AF8B201E5.get preserve=noreturnTmpString;
//##endMyString::get_TmpString%395AF8B201E5.get}inlinevoidMyString::set_TmpString(Char*value){
//## begin MyString::set_TmpString%395AF8B201E5.set preserve==:noTmpString=value;/
/##endMyString::set_TmpString%395AF8B201E5.set}inlineconst Int MyString::get_ Stat ()const {
//##beginMyString::get_Stat%395AF8BB0289.getpreserve=noreturnStat;
//##endMyString::get_Stat%395AF8BB0289.get
}
inlinevoidMyString::set_Stat(Intvalue)
{
//##begin MyString::set_Stat%395AF8BB0289.set preserve==no Stat =value;
//##endMyString::set_Stat%395AF8BB0289.set
}
inlineconstIntMyString::get_Count()const{
//##beginMyString::get_Count%395AF8C20148.getpreserve=:noreturnCount;
//##endMyString::get_Count%395AF8C20148.get
}
inline voidMyString::set_Count(Int value){
//##beginMyString::set_Count%395AF8C20148.setpreserve=noCount=value;
//##endMyString::set_Count%395AF8C20148.set}
//##beginmodule%395AF70D0321.epilogpreserve=:yes
//##end module%395AF70D0321.epilog#endifФайлMyString.cpp
//## begin module%1.3%.codegen_version preserve=yes // Read thedocumentationtolearnmore aboutC+4-code generatorversioning.
//##endmodule%1.3%.codegen_version
//##beginmodule%395AF70D0321.cmpreserve=no//%X%%Q%%Z%
%W%//ФФendmodule%395AF70D0321.cm
//##beginmodule%395AF70D0321.cppreserve=no
//##end module%395AF70D0321.cp
//##Module:MyString%395AF70D0321;PseudoPackagebody
//##Source file: C:\Program Files\Rational\ Rose\C-f 4-
\source\MyString.cpp/ЦФФbeginmodule%395AF70D0321.additionalIncludespreserve=no
//##endmodule%395AF70D0321.additionalIncludes
//##beginmodule%395AF70D0321.includespreserve=yes
//##endmodule%395AF70D0321.includes
// MyString#include"MyString.h"
//##begin module%395AF70D0321.additionalDeclarations preserve=yes
//##endmodule%395AF70D0321.additionalDeclarations
//ClassMyStringMyString: :MyString()
//##beginMyString::MyString%395AF70D0321_const.hasinitpreserve=no
//##endMyString::MyString%395AF70D0321_const.hasinit
//##beginMyString::MyString%395AF70D0321_const.initializationpreserve
=yes
//##endMyString::MyString%395AF70D0321_const.initialization{
//##beginMyString::MyString%395AF70D0321_const.bodypreserve=yes
//##endMyString::MyString%395AF70D0321_const.body}MyString::MyString(){
//##beginMyString::MyString%395AF70D0321_dest.bodypreserve=yes
//##endMyString::MyString%395AF70D0321_dest.body}MyString&MyString::operator=(constMyStringbright) {
//##begin MyString::operator=%395AF70D0321_assign.body preserve—yes
//##end MyString::operator=:%395AF70D0321_assign.bodyintMyString::operator==(const MyString&right)const{
//##beginMyString::operator==%395AF70D0321_eq.bodypreserve=yes
//##endMyString::operator==%395AF70D0321_eq.body}intMyString::operator!=(constMyString&right)const{
//##beginMyString::operator!=%395AF70D0321 neq.bodypreserve=yes
//##endMyString::operator!=:%395AF70D0321_neq.body}
//##Other Operations (implementation) Int MyString::GetStringSize (Char
*massiv){
//##beginMyString::GetStringSize%395AF87900E9.bodypreserve=yes
//## end MyString: :GetStringSize%395AF87900E9.body }IntMyString::PrintString (Char*Massiv){
//##beginMyString::PrintString%395AF88800B9.bodypreserve=yes
//##endMyString::PrintString%395AF88800B9.body}IntMyString::CmpString(Char*Strl, Char*Str2){
//##beginMyString::CmpString%395AF892013F.bodypreserve=yes
//##endMyString::CmpString%395AF892013F.body}IntMyString::CpyString(Char*Dest,Char*Source){
//##beginMyString::CpyString%395AF89C00D5.bodypreserve^yes
//##endMyString::CpyString%395AF89C00D5.body}
//AdditionalDeclarations
//##beginMyString%395AF70D0321.declarationspreserve=:yes
//##endMyString%395AF70D0321.declarations
//##beginmodule%395AF70D0321.epilogpreserve=yes
//##endmodule%395AF70D0321.epilog



  1. Бақылаусұрақтары.

  1. Автоматтыкодгенерациясыныңартықшылықтарықандай?

  2. Кодгенерациясыүшінқандайдиаграмматүрлеріқолданылады?

  3. RationalRoseқандайнегізгікодкомпоненттерінгенерациялайды?

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

  5. Моделькомпонеттерінедәлтүсініктемеберудіңмаңыздылығықандай?


Достарыңызбен бөлісу:
1   ...   109   110   111   112   113   114   115   116   117




©dereksiz.org 2024
әкімшілігінің қараңыз

    Басты бет