Objektorienteeritud programmeerimise põhimõisted

Sissejuhatus

Ajalugu: kuidas arvuteid on kasutatud probleemide lahendamiseks?
Suhtlustasandid: elektroonika - masinkood - assembler - kõrgtaseme keeled - valmiskomponendid -  integreeritud arenduskeskkonnad -  ...

Programmeerimise paradigmad,  imperatiivne vs. deklaratiivne lähenemine:


OOP eesmärgid:

    Objektid, klassid, pärimine

      Objekti kõige üldisemas tähenduses kirjeldavad

      1. Olek
      2. Käitumine
      3. Identiteet

      Kapseldus (ingl.k. encapsulation)







      Klass





      Pärimine (ingl.k. inheritance)





Javas on pärimine ühene, aga on sisse toodud võimalus, et sama klass saab realiseerida erinevaid liideseid (interface) -  sisuliselt me asendame seose "A on erijuht B-st" seosega "A oskab täita liidest B".

      Teadete saatmine (ingl.k. message passing), polümorfism




    Näide

         
        public class Loomad {

           static public void main (String[] argumendid) {
              System.out.println ("Mida loomad ytlevad?");
              Loom minuLoom = new Loom ("Patu");
              System.out.println (minuLoom); //kasutab toString() meetodit
              Kass minuKass = new Kass ("Kiti");
              System.out.println (minuKass);
              minuLoom = minuKass;
              System.out.println (minuLoom);
           } //main lopp

        } //Loomad lopp

        class Loom {

           String nimi;

           Loom (String s) { //konstruktor
              paneNimi (s);
           }

           public String votaNimi() {
              return nimi;
           }

           public void paneNimi (String s) {
              nimi = s;
           }

           public String toString() { //katame yle
              return "Olen loom " + votaNimi();
           }

        } // Loom lopp

        class Kass extends Loom { //alamklass

           int vurrupikkus;

           Kass (String s) {
              super (s);
           }

           public String toString() { //katame kaetu veel yle
              return "Olen KASS " + votaNimi();
           }

        } // Kass lopp
         
         


Lisamaterjal: analoogiline näide Pascalis


(* transleerimisel FreePascalis kasutage võtit -Sd  *)

program Loomad1;

type
TLoom =
class
fNimi: string;
constructor luuaNimeta;
constructor luua (n: string);
destructor vabastada;
function votaNimi: string;
procedure paneNimi (n: string);
function toString: string; virtual;
end;
TKoer =
class (TLoom)
fSabaga: Boolean;
constructor luuaNimeta;
constructor luua (n: string);
end;
TKass =
class (TLoom)
fVurruPikkus: integer;
function toString: string; override;
end;

constructor TLoom.luuaNimeta;
begin
fNimi := 'nimetu';
end;

constructor TLoom.luua (n: string);
begin
fNimi := n;
end;

constructor TKoer.luuaNimeta;
begin
fSabaga := true;
inherited luuaNimeta;
end;

constructor TKoer.luua (n: string);
begin
fSabaga := true;
inherited luua (n);
end;

destructor TLoom.vabastada;
begin
writeln ('Vabastati ' + fNimi);
end;

procedure TLoom.paneNimi (n: string);
begin
fNimi := n;
end;

function TLoom.votaNimi: string;
begin
votaNimi := fNimi;
end;

function TLoom.toString: string;
begin
toString := 'Olen loom ' + votaNimi;
end;

function TKass.toString: string;
var s: string;
begin
s := inherited toString;
toString := s + ' ja seejuures KASS';
end;

var minuLoom: TLoom;
minuKass: TKass;
minuKoer: TKoer;

begin
minuKass := TKass.luua ('Kiti');
minuKoer := TKoer.luuaNimeta;
minuLoom := TLoom.luuaNimeta;
minuLoom.paneNimi ('Patu');
writeln (minuKass.toString);
writeln (minuKoer.toString);
writeln (minuLoom.toString);
minuLoom.vabastada;
minuLoom := minuKoer;
writeln (minuLoom.toString);
minuLoom := minuKass;
writeln (minuLoom.toString);
minuKass := TKass (minuLoom);
writeln (minuKass.toString);
minuKass.vabastada;
minuKoer.vabastada;
end.


Jaanus Pöial, 2005