Jan Blumenthal -...

31
Rhapsody in C++ Jan Blumenthal Universität Rostock Seminar „Technische Informatik“ 08.02.2000

Transcript of Jan Blumenthal -...

Page 1: Jan Blumenthal - uni-rostock.debax.comlab.uni-rostock.de/~bj/publications/2000_02_08_-_Rhapsody_in_C++.pdfRhapsody in C++ Jan Blumenthal Universität Rostock Seminar „Technische

Rhapsody in C++

Jan BlumenthalUniversität Rostock

Seminar „Technische Informatik“08.02.2000

Page 2: Jan Blumenthal - uni-rostock.debax.comlab.uni-rostock.de/~bj/publications/2000_02_08_-_Rhapsody_in_C++.pdfRhapsody in C++ Jan Blumenthal Universität Rostock Seminar „Technische

Gliederung

• Einleitung• Features• Beispiele

– Hello World– Elevator

• Highlights• Fazit

Page 3: Jan Blumenthal - uni-rostock.debax.comlab.uni-rostock.de/~bj/publications/2000_02_08_-_Rhapsody_in_C++.pdfRhapsody in C++ Jan Blumenthal Universität Rostock Seminar „Technische

Rhapsody in C++

• Spezifikation von Software• Objektorientierter Entwurf• Automatische Godegenerierung• Anwendung in eingebetteten Systemen• Echtzeitfähige Software

Page 4: Jan Blumenthal - uni-rostock.debax.comlab.uni-rostock.de/~bj/publications/2000_02_08_-_Rhapsody_in_C++.pdfRhapsody in C++ Jan Blumenthal Universität Rostock Seminar „Technische

Systeme zur Softwaresynthese

CASE-Tools

EchtzeitfähigNicht Echtzeitfähig

UM

L

• STP• Rational Rose• Together

• Rhapsody• Room

Page 5: Jan Blumenthal - uni-rostock.debax.comlab.uni-rostock.de/~bj/publications/2000_02_08_-_Rhapsody_in_C++.pdfRhapsody in C++ Jan Blumenthal Universität Rostock Seminar „Technische

Echtzeit - Was heißt das?

Echtzeitsystem

ZuverlässigkeitResourcenumgang

Rechtzeitigkeit Performance

Page 6: Jan Blumenthal - uni-rostock.debax.comlab.uni-rostock.de/~bj/publications/2000_02_08_-_Rhapsody_in_C++.pdfRhapsody in C++ Jan Blumenthal Universität Rostock Seminar „Technische

Herkömmliche Softwareentwicklung

Nachteile:Problem

Softwareentwurf

Hardwareimplementation

- Software wird unübersichtlich

- Keine wiederverwendbare Software

- Hardwareabhängig

- Fehleranfällig, Fehlersuche schwierig

- Debugging/Monitoring nahezu unmöglich

- Programmdownload auf Zielhardware

- Echtzeitverhalten fraglich

Test

Page 7: Jan Blumenthal - uni-rostock.debax.comlab.uni-rostock.de/~bj/publications/2000_02_08_-_Rhapsody_in_C++.pdfRhapsody in C++ Jan Blumenthal Universität Rostock Seminar „Technische

Ansatz: Softwaresynthese

Vorteile:Problem+ Objektorientiert+ Automatische Codeerzeugung+ Übersichtlicher Entwurf+ Keine direkte Hardwareanbindung

Objektorientierte Analyse

OOP-Entwurf

Codegenerierung

Test

Frage: Wie erfolgt die Hardwareanbindung?

Page 8: Jan Blumenthal - uni-rostock.debax.comlab.uni-rostock.de/~bj/publications/2000_02_08_-_Rhapsody_in_C++.pdfRhapsody in C++ Jan Blumenthal Universität Rostock Seminar „Technische

Rapid Prototyping

VxWorksSolaris

PSOS PPC/X86

Crossentwicklung Environment Zielhardware

Page 9: Jan Blumenthal - uni-rostock.debax.comlab.uni-rostock.de/~bj/publications/2000_02_08_-_Rhapsody_in_C++.pdfRhapsody in C++ Jan Blumenthal Universität Rostock Seminar „Technische

Debugging

Crossentwicklung Environment Zielhardware

Simulation

+ Simulation der Hardware+ Einfaches Debugging+ Schnelle Fehlersuche+ Zeitersparnis+ Gewohnte Entwicklungsumgebung

Vorteile:

Page 10: Jan Blumenthal - uni-rostock.debax.comlab.uni-rostock.de/~bj/publications/2000_02_08_-_Rhapsody_in_C++.pdfRhapsody in C++ Jan Blumenthal Universität Rostock Seminar „Technische

Was kann Rhapsody ?

+ Einfache Fehlersuche+ Debugging+ Echtzeitfähig

- Nur C/C++ unterstützt- Betriebssystem auf Zielhardware nötig

+ Objektorientierter Entwurf+ Codegenerierung+ Abbildung auf verschiedene

Betriebssysteme

MicrosoftBorlandSolaris 2VxWorksPSOS x86/PPC

Page 11: Jan Blumenthal - uni-rostock.debax.comlab.uni-rostock.de/~bj/publications/2000_02_08_-_Rhapsody_in_C++.pdfRhapsody in C++ Jan Blumenthal Universität Rostock Seminar „Technische

Echtzeit mit Rhapsody

• OXF-Framework– Klassenbibliothek zur

Resourcenverwaltung• Statische Architekturen• Lokale Speicher• Sequenz Diagramme

Page 12: Jan Blumenthal - uni-rostock.debax.comlab.uni-rostock.de/~bj/publications/2000_02_08_-_Rhapsody_in_C++.pdfRhapsody in C++ Jan Blumenthal Universität Rostock Seminar „Technische

Hello World

Aufgabe: „Hello World“ alle 2 sec ausgeben.

• Class Display– Memberfkt Display::Writing();– Statechart

• Object Model Diagram• Component-Configuration

Page 13: Jan Blumenthal - uni-rostock.debax.comlab.uni-rostock.de/~bj/publications/2000_02_08_-_Rhapsody_in_C++.pdfRhapsody in C++ Jan Blumenthal Universität Rostock Seminar „Technische

Statechart: Class Display

Page 14: Jan Blumenthal - uni-rostock.debax.comlab.uni-rostock.de/~bj/publications/2000_02_08_-_Rhapsody_in_C++.pdfRhapsody in C++ Jan Blumenthal Universität Rostock Seminar „Technische

State: Writing

Stateentry

Stateexit

Page 15: Jan Blumenthal - uni-rostock.debax.comlab.uni-rostock.de/~bj/publications/2000_02_08_-_Rhapsody_in_C++.pdfRhapsody in C++ Jan Blumenthal Universität Rostock Seminar „Technische

Object Model Diagram

• Statische Struktur des Systems• Beziehungen zwischen Klassen

Page 16: Jan Blumenthal - uni-rostock.debax.comlab.uni-rostock.de/~bj/publications/2000_02_08_-_Rhapsody_in_C++.pdfRhapsody in C++ Jan Blumenthal Universität Rostock Seminar „Technische

Component Configuration

Physikalisches Subsystem:- Festlegung der Initialinstanzen- Wahl des Environments- Compiliert als Library bzw. Programm- Debuggingmode

HelloWorld:- Initialinstanz: Display- Environment: Microsoft- Debuggingmodus: Animation

Page 17: Jan Blumenthal - uni-rostock.debax.comlab.uni-rostock.de/~bj/publications/2000_02_08_-_Rhapsody_in_C++.pdfRhapsody in C++ Jan Blumenthal Universität Rostock Seminar „Technische

The Elevator

ElevatorPkg::Elevatorfloor : intid : int

isAtFloor()isCalledInCurrentDirection()

ElevatorPkg::Itineraryfloor : int

Itinerary()add(int aFloor)

1

ElevatorPkg::Doorfloor : intid : int

Door()evOpen(int anId,int aFloor)

ElevatorPkg::Motor

evMove(tDirection aDirection)

Page 18: Jan Blumenthal - uni-rostock.debax.comlab.uni-rostock.de/~bj/publications/2000_02_08_-_Rhapsody_in_C++.pdfRhapsody in C++ Jan Blumenthal Universität Rostock Seminar „Technische

Use CasesInteraktionen zwischen System und externen Akteuren

elevator

exit elevator

enter elevator

call elevator

select destination

take a ride

potential passengerpotential passenger

passenger

Page 19: Jan Blumenthal - uni-rostock.debax.comlab.uni-rostock.de/~bj/publications/2000_02_08_-_Rhapsody_in_C++.pdfRhapsody in C++ Jan Blumenthal Universität Rostock Seminar „Technische

Sequenz-DiagrammDefiniert möglichen Ablauf eines Use-Cases

MotorBuilding DoorElevator

evMove(aDirection)

evAtFloor()

dispatch(aFloor, aDirection)

evCall(aFloor, aDirection)

evGoto(aFloor)

evOpen(anId, aFloor)

evClosed()

isAtFloor()

isAtFloor()

elevator is idle at a floorabove

potential passenger callsan elevator

Page 20: Jan Blumenthal - uni-rostock.debax.comlab.uni-rostock.de/~bj/publications/2000_02_08_-_Rhapsody_in_C++.pdfRhapsody in C++ Jan Blumenthal Universität Rostock Seminar „Technische

Statechart: DoorStatechart: Door

• Darstellung aller Zustände der Klasse

• Übergänge durch Eventsoder Zeitvorgaben

open>opening>

closing>closed

open>opening>

closing>closed

tm(1000)

evOpen/id = params->anId;floor = params->aFloor;

tm(3000)

tm(1000)

Statechart: Elevator(Auszug)

• Verzweigte Übergänge

wait

changingDirection

C

C Cwait

changingDirection

[isCalledInOppositeDirection()]/GEN(evChangeDirection);

[isCalledInCurrentDirection()]

tm(20)

[else]

evCall

Page 21: Jan Blumenthal - uni-rostock.debax.comlab.uni-rostock.de/~bj/publications/2000_02_08_-_Rhapsody_in_C++.pdfRhapsody in C++ Jan Blumenthal Universität Rostock Seminar „Technische

Object Model Diagram• Statische Struktur des Systems• Beziehungen zwischen Klassen

IHardware

open(int anElevator,int aFloor)close(int anElevator,int aFloor)closing(int anElevator,int aFloor)moving(int anElevator,int aFloor)opening(int anElevator,int aFloorcheck(int anElevator,int aFloor)

<<Interface>>

itsHardware1

Elevator

1:Motor

1itsDownItinerary:Itinerary

1:Door

1itsUpItinerary:Itinerary

Elevator

itsItinerary1

Itineraryfloor : int

add(int aFloor)remove(int aFloor)isAtFloor(int aFloor)isNotEmpty(int aFloor,tDirection

BuildingNUMBER_OF_ELEVATORS

theElevator:Elevator

Building

Page 22: Jan Blumenthal - uni-rostock.debax.comlab.uni-rostock.de/~bj/publications/2000_02_08_-_Rhapsody_in_C++.pdfRhapsody in C++ Jan Blumenthal Universität Rostock Seminar „Technische

Packages

Zusammenfügen von– Klassen– Events– Typen– Akteuren & Use Cases

zu einer Package

exit

enter

Call

select

ride

potential passengerpotential

passenger

Page 23: Jan Blumenthal - uni-rostock.debax.comlab.uni-rostock.de/~bj/publications/2000_02_08_-_Rhapsody_in_C++.pdfRhapsody in C++ Jan Blumenthal Universität Rostock Seminar „Technische

HardwareanbindungErfolgt durch Betriebssystem/Environment

Schnittstelle zwischen Building & Environment anpassen

Environment: Microsoft

Building MFCGui Windows Hardware

Environment: VxWorks

AnpassungBuilding VxWorks Hardware

Environment: PSOS

Building PSOSAnpassung Hardware

Page 24: Jan Blumenthal - uni-rostock.debax.comlab.uni-rostock.de/~bj/publications/2000_02_08_-_Rhapsody_in_C++.pdfRhapsody in C++ Jan Blumenthal Universität Rostock Seminar „Technische

Codegeneration

• Anwendung von Design-PatternBsp: Iterator, State

• Multithreading• Standard Template Library STL• Dokumentierter Sourcecode• Rhapsody-Basisklassen (OXF)

Bsp: OMReactive, OMThread, LeafState

Page 25: Jan Blumenthal - uni-rostock.debax.comlab.uni-rostock.de/~bj/publications/2000_02_08_-_Rhapsody_in_C++.pdfRhapsody in C++ Jan Blumenthal Universität Rostock Seminar „Technische

Hello World - Source

//----------------------------------------------------------------------------// MainHelloWorld.cpp//----------------------------------------------------------------------------int main(int argc, char* argv[]) {

if(OXFInit(argc, argv, 6423)){

Display* p_Display = new Display;p_Display->startBehavior();OXFStart();delete p_Display;return 0;

}else

return 1;};

Page 26: Jan Blumenthal - uni-rostock.debax.comlab.uni-rostock.de/~bj/publications/2000_02_08_-_Rhapsody_in_C++.pdfRhapsody in C++ Jan Blumenthal Universität Rostock Seminar „Technische

Hello World - Source IIint Display::rootState_dispatchEvent(short id){

int res = eventNotConsumed;switch(rootState_active){

case Writing:{

if(id == Timeout_id){

if(((Timeout*)event)->getTimeoutId() == Display_Timeout_Writing_id){

myThread->unschedTm(Display_Timeout_Writing_id, this);//#[ state ROOT.Writing.(Exit)cout<<"Exit : Display::HelloWorld!"<<endl;//#]rootState_subState = Writing;rootState_active = Writing;//#[ state ROOT.Writing.(Entry)cout<<"Entry: Display::HelloWorld!"<<endl;//#]myThread->schedTm(2000, Display_Timeout_Writing_id, this, "ROOT.Writing");res = eventConsumed;

}}

break;};

};return res;

};

Page 27: Jan Blumenthal - uni-rostock.debax.comlab.uni-rostock.de/~bj/publications/2000_02_08_-_Rhapsody_in_C++.pdfRhapsody in C++ Jan Blumenthal Universität Rostock Seminar „Technische

Animation

• Debugging zur Laufzeit– Setzen von Breakpoints– Analyse von Instanzen– Beobachten von Statecharts– Auslösen von Events

• Siehe Beispiel: Door

Page 28: Jan Blumenthal - uni-rostock.debax.comlab.uni-rostock.de/~bj/publications/2000_02_08_-_Rhapsody_in_C++.pdfRhapsody in C++ Jan Blumenthal Universität Rostock Seminar „Technische

Reports• Classes:

– Building Relations:

itsHardwareAssociation with IHardware, Multiplicity of 1, Uni-directional

theElevatorComposition of Elevator, Multiplicity of NUMBER_OF_ELEVATORS,Uni-directional

Operations: Building

Constructor , Public Bodyint id=0;OMIterator< Elevator* > iElevator( theElevator );for ( iElevator.reset(); *iElevator; ++iElevator )

(*iElevator)->setId ( id++ ); configure

Primitive-operation , Public, Return type is voidArgs:'IHardware*' aHardwareBodysetItsHardware ( aHardware );OMIterator< Elevator* > iElevator( theElevator );for ( iElevator.reset(); *iElevator; ++iElevator ) {

(*iElevator)->setItsHardware ( aHardware );(*iElevator)->getItsDoor()->setItsHardware(aHardware ); }

Page 29: Jan Blumenthal - uni-rostock.debax.comlab.uni-rostock.de/~bj/publications/2000_02_08_-_Rhapsody_in_C++.pdfRhapsody in C++ Jan Blumenthal Universität Rostock Seminar „Technische

Interfaces

• Class-Importer– Importieren von Klassen im Sourcecode– Nur logische & physikalische Struktur,

keine Relationen• Rose-Importer• Doors Interface• Codedebugging mit Tornado-IDE• Klasseneditor

Page 30: Jan Blumenthal - uni-rostock.debax.comlab.uni-rostock.de/~bj/publications/2000_02_08_-_Rhapsody_in_C++.pdfRhapsody in C++ Jan Blumenthal Universität Rostock Seminar „Technische

Programmbeurteilung

+ Intuitive Bedienung+ Umfangreiches Tutorial+ Sehr gute Online-Hilfe+ Umfassende Anbindung externer Programme+ Stabil- Kaum Literatur- Kein Undo- Nur eine Instanz startbar- Nur WindowsNT

Page 31: Jan Blumenthal - uni-rostock.debax.comlab.uni-rostock.de/~bj/publications/2000_02_08_-_Rhapsody_in_C++.pdfRhapsody in C++ Jan Blumenthal Universität Rostock Seminar „Technische

Rhapsody in C++

The End

Neugierig geworden?