Slide 1Programmatuur voor real-time controleYolande Berbers RTPReal-Time Programmatuur hoofdstuk 4: het beheersen van complexiteit: programming in the.

Slides:



Advertisements
Verwante presentaties
Objectgeoriënteerd Programmeren in C++
Advertisements

Algoritmen en Datastructuren (ALDAT)
Programmeren met Alice
Electronic Resource Management (ERM) Els Schaerlaekens Anet Gebruikersdag 15 juni 2011.
Hogeschool HZ Zeeland 19 augustus 2003augustus 2003 Data Structuren & Algoritmen Week 1.
Hoofdstuk 8: Recursie.
Ronde (Sport & Spel) Quiz Night !
Instructie Programmeren Task 8 5JJ70. PAGE 2 Task 8: Double Linked List Het doel van deze opdracht is: Het opbouwen van een tweetal klassen, die samen.
GESPRG Les 14 Gestructureerd programmeren in C. 174 Details! The devil is in the details.
Datastructuren Analyse van Algoritmen en O
F. Rubben NI Lookout 1 06/RIS/05 - NI Lookout VTI Brugge F. Rubben, ing.
Klassen en objecten.
Hogeschool HZ Zeeland 19 augustus 2003augustus 2003 Data Structuren & Algoritmen Week 5.
1 Tentamen 21 januari 2008 uitleg Algemene kennisvragen a)“Wat verstaan we onder de complexiteit van een algoritme?” –Cruciaal: wat gebeurt er met.
Hoofdstuk 6: Controle structuren
1 SOCS Hoofdstuk 1 Computerarchitectuur. 2 Overzicht Eenvoudig C Arrays Functies Records Dynamische gegevenstructuren Macro’s C.
1 SOCS Hoofdstuk 1 Programmeertaal C. 2 Kenmerken van C Hogere programmeertaal  Grote verzameling types, strenge type controle  Zelf nieuwe types definiëren.
1 Datastructuren Sorteren: alleen of niet alleen vergelijkingen College 5.
1 Datastructuren Lijstjes (Stacks & Queues) Onderwerp 7.
Les 2 Basisbouwstenen (deel 1)
De koektrommel of de grabbelton
‘Inleiding programmeren in Java’ Derde college Maandag 22 januari 2001 drs. F. de Vries.
1 Voorwaarden hergebruik Modulair ontwerp Low coupling High cohesion.
Frank Stalpers en Ad Baars
Inleidend probleem Data structuur (hiërarchie van classes)
Numerieke Natuurkunde
1 Datastructuren Heapsort (2e deel) College 5. 2 Vandaag  Heaps en Heapsort  (eind)  Nog sneller sorteren:  Ondergrenzen  Linair sorteren.
SIP File Recovery Tool. Agenda 18/10/2006Maken agenda + onderzoeken van verschillende filetypes 25/10/2006Uitzoeken hoe er effecient gelezen en geschreven.
2009 Tevredenheidsenquête Resultaten Opleidingsinstellingen.
Informatieanalyse.
Algoritmiek Object-georiënteerd Programmeren
1 Datastructuren Introductie tot de programmeeropgaven in C++ Jan van Rijn
Hoofdstuk 3: Inleiding tot Java Applets
Hogeschool HZ Zeeland 19 augustus 2003augustus 2003 Data Structuren & Algoritmen Week 3.
P. 1 Vakgroep Informatietechnologie Structuur Deel II C++ Classes Namespaces Type casting Reference types Constructors en Destructors Memory Management.
LauwersCollege Buitenpost Java Applet programma dat op een website zichtbaar is Java Application programma dat zelfstandig werkt Javascript Scripttaal.
OO Analyse in de praktijk OO Analyse in de praktijk V Enkele Design Patterns.
Herhaling Java-programmatie en geautomatiseerd testen (vervolg)
Deel XIV Eerste echte e-commerce applicatie Implementatie (vervolg) 1 Internetapplicaties Deel 15: Herhaling Java-programmatie en geautomatiseerd testen.
De financiële functie: Integrale bedrijfsanalyse©
Overerving Inheritance Overerving l Inleiding l Type-extensie l Compatibiliteit van een basistype met zijn extensie l Statisch en dynamisch type l Run.
Slide 1Programmatuur voor real-time controleYolande Berbers RTPReal-Time Programmatuur hoofdstuk 6: uitzonderingen en de behandeling van uitzonderingen.
1 Zie ook identiteit.pdf willen denkenvoelen 5 Zie ook identiteit.pdf.
Overerving: It’s a kind of magic…. Principes van OO: 1) Overerving 2) Encapsulatie 3) Polymorphisme = (deel van het) OO. paradigma.
Interfaces Hoofdstuk 23 Hoofdstuk 23.
Introductie tot GoF patterns in Java
Tircms02-p les 3 Functies Strings Structuren. Functies 1. main() 2. { int k; k = 10 ; printf(“%d\n”,fac(k)); } 3. int fac(n) int n; 4. { int f; f= 1;
tircms02-p les 1 Operating Systems practicum
Tircms03-p les 4 Klassen. Abstracte datatypes in C struct stack { char info[100]; int top; }; void reset(stack *s) { s->top = -1; } void push(stack *s,
Cegeka & TenForce Ronde tafel 17/06/2014 Doelstellingenmanagement VO.
Vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Onderwerpen voor vandaag top-down decompositie Opdrachten:
Polymorphisme en Interfaces: inleiding
Java Objectgeoriënteerd Programmeren in Java met BlueJ
Java Objectgeoriënteerd Programmeren in Java met BlueJ Hoofdstuk 7 Polymorfie en overerving © 2014, Gertjan Laan, versie 2.
Java Objectgeoriënteerd Programmeren in Java met BlueJ Hoofdstuk 8: Gebruikersinterface © 2014, Gertjan Laan, versie 2.
Studiehouding Ergens verstand van krijgen kost tijd… Uren die je alleen in je boeken doorbrengt maken het verschil. Er is niets mis met onafhankelijkheid.
 C++ heeft een inheritance mechanisme  Manier om functionaliteit te ‘erfen’ van een parrent class ◦ Polymorphisme ◦ Zoals we het ook in C# kennen.
Variabelen. Wat zijn variabelen? In een programmeertaal zijn er “dingen” nodig die ervoor zorgen dat het programma informatie voor korte of langere tijd.
GEGEVENSSTRUCTUREN IN.NET. Inleiding  Enumerated type  Structure  Collecties  Typed collections  Untyped collections.
Java voor beginners Doel: Een spel maken in LWJGL Door: Jim van Leeuwen.
De definitie van een object. Een object is een verzameling van eigenschappen en bewerkingen. Veel voorkomende objecten zijn: D (display) Gui (user interface)
Objectgeoriënteerd Programmeren (2)
Objectgeoriënteerd Programmeren
Gameprogrammeren: Lists en interfaces
Gameprogrammeren: Overerving
Gameprogrammeren: Methoden
Tinpro015b-les4 Klassen.
Gameprogrammeren: Abstracte klassen
SQL Les February 2019.
Software Development fundamentals
Transcript van de presentatie:

slide 1Programmatuur voor real-time controleYolande Berbers RTPReal-Time Programmatuur hoofdstuk 4: het beheersen van complexiteit: programming in the large

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)

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

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

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

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)

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

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

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

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

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

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

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

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;

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

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;

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

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);

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

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

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

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

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

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;

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)

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

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)

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)

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);

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

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; ….

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

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

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

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); };

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; }; }

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