Metody realizacji języków programowania/MRJP Ćwiczenia 5: Różnice pomiędzy wersjami

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Zaroda (dyskusja | edycje)
Nie podano opisu zmian
Zaroda (dyskusja | edycje)
Linia 46: Linia 46:
Wiele obiektowych języków programowania posiada mechanizm umożliwiający wywołanie metody, którą aktualna metoda przedefiniowuje. Np. :
Wiele obiektowych języków programowania posiada mechanizm umożliwiający wywołanie metody, którą aktualna metoda przedefiniowuje. Np. :


  class A;
  '''class''' A;
   procedure pisz;
   '''procedure''' pisz;
   begin
   '''begin'''
     write('A')
     write('A')
   end;
   '''end''';
  end;
  '''end''';
   
   
  class B extends A;
  '''class''' B '''extends''' A;
   procedure pisz;
   '''procedure''' pisz;
   begin
   '''begin'''
     write('B oraz');
     write('B oraz');
     super.pisz
     super.pisz
   end;
   '''end''';
  end;
  '''end''';


Umieszczenie, jako odbiorcy komunikatu, słowa "super" oznacza tu, że chcemy wywołać metodę z nadklasy.
Umieszczenie, jako odbiorcy komunikatu, słowa "super" oznacza tu, że chcemy wywołać metodę z nadklasy.

Wersja z 19:12, 26 wrz 2006

Zadanie - tłumaczenie funkcji

Przy założeniu, że mamy do czynienia z językiem bez struktury blokowej (w rekordzie aktywacji nie ma SL) przetłumacz na kod NMW treść funkcji g z poniższego przykładu:

function f(w:integer; var x:integer):integer;
begin
...
end;

function g(y:integer; var z:integer):integer;
var a:integer;
begin
  g:=y;
  a:=z;
  z:=f(a,a)
end;

Zadanie - struktura blokowa

Zakładając, że poniższy fragment programu jest napisany w języku ze strukturą blokową, przetłumacz treść procedury r:

procedure p(a:integer);
  procedure q(var b:integer);
    var c:integer;
    procedure s(d:integer);
    begin
    ...
    end;
    procedure r;
      var e:integer;
    begin
      e:=a+b;
      b:=c;
      s(b);
      q(e)
    end;
  begin
  ...
  end;
begin
...
end;

Zadanie - realizacja mechanizmu "super"

Wiele obiektowych języków programowania posiada mechanizm umożliwiający wywołanie metody, którą aktualna metoda przedefiniowuje. Np. :

class A;
  procedure pisz;
  begin
    write('A')
  end;
end;

class B extends A;
  procedure pisz;
  begin
    write('B oraz');
    super.pisz
  end;
end;

Umieszczenie, jako odbiorcy komunikatu, słowa "super" oznacza tu, że chcemy wywołać metodę z nadklasy.

Zaproponuj sposób realizacji tego machanizmu i podaj tłumaczenie "super.pisz" z powyższego przykładu.

Zadanie - tłumaczenie metod

Przetłumacz treść metody ...:

class A; end;

class B extends A; end;

class C extends B; end;