1 / 14

Litt om OO og programmering

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.

wesley
Télécharger la présentation

Litt om OO og programmering

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Litt om OO og programmering Arne Maus

  2. 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#

  3. 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)

  4. 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)

  5. 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)

  6. 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

  7. De mest interessante delene av Test.class (=Bytekode, totalt 693 byte)

  8. 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

  9. 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++.

  10. 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’

  11. 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’

  12. 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

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

  14. 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

More Related