140 likes | 303 Views
Litt om OO og programmering. Arne Maus. OO og Java (og C++, C#). Arven fra Simula Programstruktur i Java Generering av objekter Beskyttelse /”adgangskontroll” Start og avslutningsoperasjoner i et objekt Subklasser, virtuelle prosedyrer Templates Java og C#. C++ og arven fra Simula.
E N D
Litt om OO og programmering Arne Maus
OO og Java (og C++, C#) • Arven fra Simula • Programstruktur i Java • Generering av objekter • Beskyttelse /”adgangskontroll” • Start og avslutningsoperasjoner i et objekt • Subklasser, virtuelle prosedyrer • Templates • Java og C#
C++ og arven fra Simula • C++ laget som en nesten ‘kopi’ av Simula av Bjarne Stroustrup • C++ er en utvidelse av (tillegg til) C • C++ har en forferdelig syntaks (skrivemåte) • mange symboler ( * : ) og ord (static) brukes med ulik betydning i ulike sammenhenger • C++ er et rikt språk, men også komplisert • under utvikling, arven fra C, definisjonen stor • eks: static har 26 henvisninger/mulige bruksområder i Stroustrup • God funksjonalitet • Raskt (ikke mer enn 2% langsommere enn ‘ren’ C)
Java og arven fra C++ • Java er laget med C++ syntaks (skrivemåte) • Java er laget med mye av Simulas virkemåte • Pekere sjekkes at de peker på objekt av riktig type • Det sjekkes at arrayer ikke aksesseres utenfor område • Ikke vilkårlig typekonvertering (casting) • Alltid initialiserte variable • Bare enkel arv • Vesentlige nyheter: • Alt er klasser og objekter • Klassevariable • Abstrakte klasser, grensesnitt • Langt flere biblioteker - bl.a Nettet , database(ODBC) og GUI (AWT) • Parallellitet (tråder)
Java programstruktur • Ethvert programsystem består av: • En rekke kildefiler av typen ’xyz.java’ De inneholder hver en klasse som er refererbar utenfra (public). Klassen heter det samme som filen. • Hver slik .java fil kompileres til en motsvarende .class fil. Det er ansamlingen av . class-filene i filkataloger og underkataloger som er systemet. Innholdet på .class-filene er Bytekode. Er felles for alle maskiner og operativsystemer. • I det enkleste tilfellet tolkes ’.class’ filene (langsomt, men flyttbart) • Nå kompileres vanligvis de under eksekvering eller før eksekvering til maskinkode (raskt, men ikke flyttbart)
Kildefil: Test.java (ant. byte: 247) //Fil: Test.java import java.io.*; public class Test { public static void main (String [ ] args ) { test am = new Test( ); System.out.println("Arne: 3 * 4 er:" + am.xx(4) ); } protected int xx (int i) { return i*3;} } Kjøring: E:\java-unix>javac Test.java E:\java-unix>java Test Arne: 3 * 4 er:12
De mest interessante delene av Test.class (=Bytekode, totalt 693 byte)
Vi må lage alle objekter med new (Java) void make_queue ( ) { int i; System.out.println("Start test"); for (i= 1; i <= 1000; i++){ refA = new Bil( ); sist.neste = refA; sist = sist.neste; } System.out.println ("Slutt test, antall biler er : ” + i); } } // // fil: Biltest.java import java.io.*; class Bil{ Bil neste ; int reg_nr = 0; } public class Biltest{ Bil first = new Bil( ); Bil sist = first; Bil refA; public static void main ( String[] args) { int i = 0; Biltest b = newBiltest( ); b.make_queue( ); } Kjøring: E:\Sun-NT-Java\PC-Java>java biltest Start test Slutt test, antall biler er : 1001
Dynamisk generering av objekter i C++ og Java C++ eks: class Punkt { int x,y; .....}; Punkt *f, *n; f = new Punkt; ........ n = f; f = new Punkt; ........... delete f; delete n; Java eks: class Punkt { int x,y; .....} Punkt f, n; f = new Punkt ( ); ........ n = f; f = new Punkt ( ); ........... - Bare dynamisk generering av objekter i Java med new. - Også mulig med statisk generering av objekter i C++.
Beskyttelse /”adgangskontroll” • private: • det som bare objekter av denne klassen kan bruke(er default) • protected: • det som objekter av denne klassen og derived klasser (subklasser) kan bruke • public: • Klassens grensesnitt, dvs. det som alle andre deler av programmet kan bruke i objektene. • friendly/package • Klassene på samme fil har adgang til hverandre omtrent som ’public’
Start og avslutningsoperasjoner i et objekt (Java og C++) • Til enhver klasse kan det defineres og en start og slutt funksjon • constructoren • destructoren (bare C++) • Constructoren • Har samme navn som klassen • Utføres når et objekt av klassen oppstår • Destructoren (bare C++) • Har navn= ~klassenavnet • Utføres når objektet ‘dør’
Subklasser = avledete klasser+ grensesnitt • Subklasser arver alle attributtene til basisklassen(e) class tempsekretær extends sekretærimplements midlertidig {...}; class ansatt { String navn; ..... } class sjef extends ansatt { int bilkode; ... } class direktør extends sjef { int fallskjerm_nr ; ...} interface midlertidig { .bare konstanter og metoder u. kode...} class sekretær extends ansatt {...} ansatt ’midlertidig’ sjef sekretær direktør tempsekretær
Templates i C++ ( ikke i Java) • Klassenavn som parametre til klasser, generelle klasser template <class T> class stack { T * v; T * p; int sz; public: stack (int); ~stack( ); void push (T); T pop( ); int size ( ) const; } template <class T > void stack<T>:: push(T a) { *p++ = a;} template <class T> stack <T> :: stack(int s) { v = p = new T[sz = s];} ...... stack <ansatt> reg(100);
C# og .NET • C# er et språk som er en nær kopi av Java • Noen forbedringer • Mellomkoden kompileres alltid til maskinkode og er lettere å få rask • Samme mellomkode brukes av mange språk i .NET (Cobol,..., ikke Java) • Mulihet for referanseparametre til metoder • Kan ha vanlige firkant-arrayer i tillegg til Java-type arrayer • Letter print/read bibliotek,.. • Muligheter for ‘unsafe’ kode (peker-manipulasjon mm, maskinkode) • Bruker et annet bibliotek enn Java slik at det ikke blir lett å konvertere programmer Java – C# • Konklusjon – Meget like språk – noe lettere å lage effektiv kode i C# • C# er opplagt språket for .NET http://genamics.com/developer/csharp_comparative.htm#20