Download de presentatie
De presentatie wordt gedownload. Even geduld aub
GepubliceerdNathalie Dekker Laatst gewijzigd meer dan 10 jaar geleden
1
slide 1Programmatuur voor real-time controleYolande Berbers RTPReal-Time Programmatuur hoofdstuk 4: het beheersen van complexiteit: programming in the large
2
RTP slide 2Programmatuur voor real-time controleYolande Berbers karakteristieken van een RTS (copie van slide van H1) n groot en complex u niet gewoon proportioneel met het aantal lijnen code, wel aan de variëteit die in de code voorkomt u verandert continu omdat de omgeving continu verandert u kan variëren van enkele honderden lijnen assembler of C tot 20 miljoen lijnen Ada-code (geschat voor het ruimtestation Freedom)
3
RTP slide 3Programmatuur voor real-time controleYolande Berbers decompositie en abstractie n decompositie u “verdeel en heers”-principe u systematisch opsplitsen van een complex probleem in kleinere en kleinere entiteiten l totdat componenten geïsoleerd kunnen worden die l begrepen en opgelost kunnen worden door individuen of kleine groepen u top down ontwerp n abstractie u geeft de mogelijkheid om details van componenten naar een latere fase te verschuiven en om de essentie van componenten te specifiëren u bottom up ontwerp
4
RTP slide 4Programmatuur voor real-time controleYolande Berbers evolutie in programmeertechnieken n procedurele programmering n modules voor informatieverberging n data abstractie n object georiënteerde programmering
5
RTP slide 5Programmatuur voor real-time controleYolande Berbers kenmerken van programmeertechnieken n procedurale programmering u centraal aandachtspunt: gegevensstructuren en procedures die hierop werken u programmeringsparadigma: kies gegevensstructuren, procedures en algoritmen u taal ondersteuning: procedures, functies, parameters u vb: Fortran77, Algol, Pascal, C u grootste probleem: bereik en zichtbaarheid van gegevensstructuren
6
RTP slide 6Programmatuur voor real-time controleYolande Berbers kenmerken van programmeertechnieken n gegevensverberging (information hiding) u centraal aandachtspunt: module (gegevens + operaties op deze gegevens) u programmeringsparadigma: kies goede modules u taal ondersteuning: ondersteuning voor modules u vb: Ada, Modula2 en in zekere opzichte C u grootste probleem: een module kan niet meerdere keren geïnstantieerd worden (een module voor een lijst implementeert één lijst)
7
RTP slide 7Programmatuur voor real-time controleYolande Berbers kenmerken van programmeertechnieken n data abstractie u centraal aandachtspunt: l modules worden types s synoniemen: abstracte gegevenstypes, gebruikersgedefinieerde types, klassen l waarvan variabelen (objecten) geïnstantieerd worden u programmeringsparadigma: l kies de types; voorzie deze van operaties u vb: Ada, C++, Java
8
RTP slide 8Programmatuur voor real-time controleYolande Berbers kenmerken van programmeertechnieken n data abstractie (vervolg) u taal ondersteuning: l alle mechanismen die toelaten om types door een gebruiker gedefinieerd op dezelfde manier te gebruiken als ingebouwde types l mechanismen voor het creëren (en vernietigen) van objecten l mechanismen voor het initialiseren van objecten l objecten gebruikt als parameters, als functieresultaat l toekenningen, vergelijkingen, overladen van operatoren l... u grootste probleem: l het is niet mogelijk om een bestaand type aan te passen
9
RTP slide 9Programmatuur voor real-time controleYolande Berbers kenmerken van programmeertechnieken n object-georiënteerde programmering u centraal aandachtspunt l definieer basisklassen en algemene eigenschappen l door over-erving (inheritance) andere klassen afleiden u programmeringsparadigma l kies goede klassen met goede operaties l maak gemeenschappelijke dingen expliciet door over-erving u taal ondersteuning l klassenmechanismen met over-erving l polymorfisme: operatie hangt af v dynamisch type parameter u vb: Simula67, Smalltalk-80, C++, Eifel, Ada95, Java
10
RTP slide 10Programmatuur voor real-time controleYolande Berbers modules n informele definitie van module u verzameling logisch samenhangende objecten en operaties n encapsulatie u een wel bepaalde functie isoleren in een module, en een precieze specificatie maken voor de interface n modules geven ondersteuning voor u gegevensverberging u aparte compilatie u abstracte gegevenstypes n C: zeer zwakke ondersteuning voor modules n Ada en Java: expliciete ondersteuning via packages n C++ : dynamische ondersteuning voor modules
11
RTP slide 11Programmatuur voor real-time controleYolande Berbers gegevensverberging n Pascal (en andere eenvoudige programmeertalen): u globale declaraties van l een variabele die door meerdere procedures gedeeld wordt l een variabele die gebruikt wordt bij elke oproep van een bepaalde procedure u nadelen l gevoelig aan fouten (bv gebruik van globale variabele daar waar het niet mag) l moeilijk onderhoudbaar: slecht zicht op wat bij elkaar hoort l stroeve ontwikkelingsmogelijkheden: iets wijzigen aan de globale variabelen vraagt de hercompilatie van heel de code
12
RTP slide 12Programmatuur voor real-time controleYolande Berbers gegevensverberging n een module structuur u zorgt voor beperkte zichtbaarheid door de mogelijkheid te bieden om gegevens te verbergen in ‘lichaam’ van de module u biedt een manier om de toegang tot de variabelen van de module te controleren u voorbeeld: implementatie van een dynamische FIFO-queue u interface: 3 routines l toevoegen van een element l weghalen van een element l testen op het leeg zijn van de queue u interne gegevens (bv pointer naar de queue) mogen niet zichtbaar zijn buiten de module
13
RTP slide 13Programmatuur voor real-time controleYolande Berbers gegevensverberging: package in Ada n package heeft twee delen u specificatie interface: dit is zichtbaar er buiten u lichaam: dit is de implementatie, is onzichtbaar er buiten l het lichaam bevat een initialisatie-deel n beide moeten in hetzelfde declaratieve deel staan u er mag wel iets tussen staan u bv spec. pack. A, spec. pack. B, lichaam pack. A, lichaam pack. B u op deze manier kunnen A en B elkaar oproepen n routines (en ge-exporteerde variabelen) kunnen bereikt worden via naam_package.naam_routine n implementatie van slechts één instantie van de queue n de queue wordt gecreëerd in het initialisatie-deel
14
RTP slide 14Programmatuur voor real-time controleYolande Berbers gegevensverberging: package in Ada n specificatie interface: deze entiteiten zijn zichtbaar er buiten voorbeeld van oproep: Queuemod.Insert (El); n lichaam : dit is de implementatie, zie volgende slide package Queuemod is function Empty return Boolean; procedure Insert (E: Element);-- Element moet zichtbaar zijn procedure Remove (E: out Element); end Queuemod;
15
RTP slide 15Programmatuur voor real-time controleYolande Berbers gegevensverberging: package in Ada (vervolg) packagebody Queuemod is type... Q: Queue_Ptr_T; procedure Create is begin... end Create; function Empty return Boolean is begin... end Empty; procedure Insert (E: Element) is begin... end Insert; procedure Remove (E: out Element) is begin... end Remove; begin Create; end Queuemod; gegevensverberging: package in Ada
16
RTP slide 16Programmatuur voor real-time controleYolande Berbers gegevensverberging: package in Ada n use: u om de naamgeving niet te zwaar te maken wanneer veel elementen uit een package gebruikt worden u naam_package.naam_routine wordt naam_routine declare use Queuemod; begin if not Empty then Remove (E); end if; end;
17
RTP slide 17Programmatuur voor real-time controleYolande Berbers gegevensverberging in C n C: geen taalconstructies voor gegevensverberging n modules kunnen nagebootst worden door code in verschillende bestanden te plaatsen u per module een ‘header-file’, deze eindigt op ‘.h’ u per module een ‘body-file’, deze eindigt op ‘.c’ u het header-bestand wordt ingelast in het.c-bestand u geen formele relatie tussen deze bestanden, alleen naamconventie n nadelen: u geen initialisatie-deel (initialisatie zal ergens expliciet moeten staan) u minder testen door de compiler zijn mogelijk u bv geen test op volledigheid specificatie tov lichaam en omgekeerd: het ontbreken van een routine wordt slechts opgemerkt bij het linken
18
RTP slide 18Programmatuur voor real-time controleYolande Berbers gegevensverberging in C n header-bestand (.h bestand): dit bestand definieert de functionele interface van de module n dit header-bestand moet ingelast worden in elk bestand dat van de module wenst gebruik te maken (via #include-instructie) n implementatie staat in een.c bestand, zie volgende slide int Empty(); void insertE (element E); void removeE (element *E);
19
RTP slide 19Programmatuur voor real-time controleYolande Berbers gegevensverberging in C (vervolg) #include “queuemod.h” struct... void create() {... } int empty() {... } void insertE (element E) {... } void removeE (element *E) {... } gegevensverberging in C
20
RTP slide 20Programmatuur voor real-time controleYolande Berbers gegevensverberging in C int Empty(); void insertE (element E); void removeE (element *E); queuemod.h #include “queuemod.h” …. int empty() {... } void insertE (element E) {... } …. queuemod.c #include “queuemod.h” …. element E1, E2; insertE(E1); insertE(E2); …. put_in.c #include “queuemod.h” …. element E3; if !empty() removeE(&E3) …. take_out.c
21
RTP slide 21Programmatuur voor real-time controleYolande Berbers tekortkomingen van modules n modules zijn geen eerste-klas-taalelementen u moduletypes kunnen niet gemaakt worden l je kunt geen verschillende instanties van module creëren u je kunt geen pointer naar een module laten wijzen
22
RTP slide 22Programmatuur voor real-time controleYolande Berbers aparte compilatie n voordelen van het apart compileren van modules u een module kan geschreven en getest worden, onafhankelijk van rest van programma u eens getest kan de module in een bibliotheek geplaatst worden, eventueel reeds gecompileerd u aparte compilatie ondersteunt projectbeheer u voordeel dat niet alles telkens gehercompileerd moet worden (dat geldt natuurlijk vooral voor ‘programming in the large’) n aparte compilatie ondersteunt bottom-up ontwerp u vooral bottom-up ontwerp van specificaties is interessant
23
RTP slide 23Programmatuur voor real-time controleYolande Berbers aparte compilatie in C int Empty(); void insertE (element E); void removeE (element *E); #include “queuemod.h” …. int empty() {... } void insertE (element E) {... } …. #include “queuemod.h” …. element E1, E2; insertE(E1); insertE(E2); …. #include “queuemod.h” …. element E3; if !empty() removeE(&E3) …. queuemod.h queuemod.c put_in.ctake_out.c
24
RTP slide 24Programmatuur voor real-time controleYolande Berbers aparte compilatie in Ada n with-constructie: gebruik van een package uit bibliotheek (een beetje te vergelijken met #include van C) n een with-constructie kan in een andere package staan: zo ontstaat een hiërarchie van modules u vb: module Dispatcher maakt gebruik van module Queuemod package Dispatcher is...-- nieuwe zichtbare entiteiten end Dispatcher; with Queuemod; package body Dispatcher is...-- verborgen entiteiten end Dispatcher;
25
RTP slide 25Programmatuur voor real-time controleYolande Berbers aparte compilatie in Ada n voordelen u specificatie en lichaam zijn expliciet in de bibliotheek u bibliotheek is deel van Ada-omgeving met tools u specificatie kan geschreven worden vóór het lichaam l logische consistentie kan reeds door compiler getest worden l specificatie kan geschreven worden door project-leiders s specificatie is een deel van ontwerpen s uitwerken van specificatie is vaak programming in the small s fout in specificatie heeft grotere gevolgen dan fout in lichaam: alle modules die de specificatie gebruiken moeten eventueel gewijzigd worden s (bij fout in een lichaam: enkel dit lichaam hercompileren)
26
RTP slide 26Programmatuur voor real-time controleYolande Berbers aparte compilatie n Ada u aparte compilatie is deel van de taal l bibliotheekomgeving is deel van taal l consistentie van specificaties en types gebeurt over bibliotheekeenheden n C u aparte compilatie is geen deel van taal l C-bestand worden apart gecompileerd: object modules l object modules worden gelinked l bij het linken wordt niet gechecked op specificatie- consistentie en types
27
RTP slide 27Programmatuur voor real-time controleYolande Berbers abstracte gegevenstypes n uitbreiding van idee dat gebruikers van een type niets hoeven te weten van de precieze voorstellingskeuze van dit type (bv lijst, enkel of dubbel gelinkt, circulair of niet,..) n lost één van de tekortkomingen van modules op n ADT (abstract data type) = module dat een type definieert u type bepaalt: objecten en operaties u definitie van een type impliceert dat er variabelen van dit type kunnen gedeclareerd worden u een creatie-routine is hier absoluut noodzakelijk n alle OO-talen bieden dit (dus ook Java)
28
RTP slide 28Programmatuur voor real-time controleYolande Berbers abstracte gegevenstypes n extra moeilijkheid wanneer gecombineerd met aparte compilatie u normaal wensen we dat de interne voorstelling van het type verborgen wordt, zich dus in het lichaam bevindt u module dat gebruik maakt van een ADT moet het volgende kennen: l de operaties (= specificatie, de interface) l de grootte van het ADT (dit is nodig voor de compilatie van de gebruikmakende module) u mogelijke oplossing: gebruik van een indirectie l altijd een pointer gebruiken naar het ADT: een pointer heeft een vaste grootte (vaak gebruikt in C) u in Ada: interne voorstelling wordt bij specificatie gevoegd l als limited private l als private (dan zijn ook toekenning en vgl mogelijk)
29
RTP slide 29Programmatuur voor real-time controleYolande Berbers abstracte gegevenstypes in C n voorbeeld van gebruik van indirectie in C: als extra parameter wordt hier nu altijd een pointer naar het object gebruikt int empty(queue_ptr_t Q); void insertE (queue_ptr_t Q, element E); void removeE (queue_ptr_t Q, element *E);
30
RTP slide 30Programmatuur voor real-time controleYolande Berbers abstracte gegevenstypes in Ada package Complex_Arithmetic is type Complex is private; function ”+” (X, Y: Complex) return Complex; function ”-” (X, Y: Complex) return Complex; function Comp (A, B: Float) return Complex; function Real_Part (X: Complex) return Float; private type Complex is record Real_Part: Float; Imag_Part: Float; end record; end Complex_Arithmetic; abstracte gegevenstypes in Ada
31
RTP slide 31Programmatuur voor real-time controleYolande Berbers abstracte gegevenstypes in Ada with Complex_Arithmetic; use Complex_Arithmetic; …. C1, C2, C3: Complex; A, B: float; …. C2 := Comp(A, B); C3 := C1 + C2; if C1 = C2 then …. end if; ….
32
RTP slide 32Programmatuur voor real-time controleYolande Berbers object-georiënteerd programmeren n verder uitbreiding van ADT (variabelen van de ADT worden objecten genoemd) n 4 extra kenmerken u uitbreidbaarheid van type (over-erving) u automatische initialisatie van objecten (constructors) u automatische destructie van objecten (destructors) u soort operatie wordt pas bij uitvoering bepaald (polymorfisme) l probleem bij real-time programma's: polymorfisme maakt het niet mogelijk om via de code te weten welke operatie opgeroepen zal worden: moeilijk om nodige tijd te schatten n ondersteund in Ada en Java u Ada: object-oriëntatie van Ada zullen we niet gebruiken in deze cursus u Java: zie MI, IPS of POO
33
RTP slide 33Programmatuur voor real-time controleYolande Berbers OOP en Java n sleutelwoord extends u geeft aan dat een klasse van een andere is afgeleid u public class Coordinate {.. } // voor 2-dimensionaal werken u public class ThreeDimension extends Coordinate { … } // voor 3-dimensies l nieuwe velden kunnen toegevoegd worden l extra operaties kunnen gedefinieerd worden l bestaande operaties kunnen ge-herdefinieerd worden, en mogen in hun definitie gebruik maken van oorspronkelijke operatie n abstracte klasse u hier kunnen geen objecten van gedeclareerd worden u moet via over-erving concreet gemaakt worden n finale klasse u hiervan kan men niet over-erven
34
RTP slide 34Programmatuur voor real-time controleYolande Berbers herbruikbaarheid n herbruikbaarheid is veelbelovend voor softwareproductie, maar niet zo eenvoudig n overerving is een goed middel n ander middel: een sjabloon u type is generisch en wordt pas bepaald bij instantiatie u uitwerking in Ada, C++ en Java l generic modules in Ada l template in C++ l interfaces in Java: werkt iets anders (zie volgende slides) u componenten kunnen geïnstantieerd worden van een sjabloon u voorbeeld: een ADT dat een queue van elementen beheert, het type van de elementen wordt in het sjabloon nog niet bepaald
35
RTP slide 35Programmatuur voor real-time controleYolande Berbers Java: interfaces n interfaces u om relaties te leggen buiten klasse-hierarchie u zijn altijd abstract: geen declaratie van instanties van interface u speciale vorm van klasse met methods en constanten u meerdere andere klassen kunnen een interface implementeren lessThan neemt als par. elk object dat Ordered interface impl. public interface Ordered { boolean lessThan (Ordered O); };
36
RTP slide 36Programmatuur voor real-time controleYolande Berbers Java: klasse die interface impl. class ComplexNumber implements Ordered { protected float realPart; protected float imagPart; public boolean lessThan(Ordered O) // interface implementation { ComplexNumber CN = (ComplexNumber) O; // cast the parameter if((realPart*realPart + imagPart*imagPart) < (CN.getReal()*CN.getReal() + CN.getImag()*CN.getImag())) { return true; } return false; }; public ComplexNumber (float I, float J) // constructor { realPart = I; imagPart = J; }; public float getReal() { return realPart;}; public float getImag() { return imagPart; }; }
37
RTP slide 37Programmatuur voor real-time controleYolande Berbers Java: interfaces public class ArraySort { public static void sort (Ordered oa[], int size) //sort method { Ordered tmp; int pos; for (int i = 0; i < size - 1; i++) { pos = i; for (int j = i + 1; j < size; j++) { if (oa[j].lessThan(oa[pos])) { pos = j; } tmp = oa[pos]; oa[pos] = oa[i]; oa[i] = tmp; }; n sort is een routine die een array van objecten kan sorteren van elke klasse die de interface Ordered implementeert
Verwante presentaties
© 2024 SlidePlayer.nl Inc.
All rights reserved.