0% au considerat acest document util (0 voturi)
63 vizualizări

Laborator8 - Java

Documentul prezintă noțiuni teoretice despre clase și metode abstracte în Java. Se explică ce sunt clasele abstracte și interfețele, precum și metodele abstracte. Se dau exemple de implementare a acestor concepte în codul Java.

Încărcat de

bredtm
Drepturi de autor
© © All Rights Reserved
Formate disponibile
Descărcați ca PDF, TXT sau citiți online pe Scribd
0% au considerat acest document util (0 voturi)
63 vizualizări

Laborator8 - Java

Documentul prezintă noțiuni teoretice despre clase și metode abstracte în Java. Se explică ce sunt clasele abstracte și interfețele, precum și metodele abstracte. Se dau exemple de implementare a acestor concepte în codul Java.

Încărcat de

bredtm
Drepturi de autor
© © All Rights Reserved
Formate disponibile
Descărcați ca PDF, TXT sau citiți online pe Scribd
Sunteți pe pagina 1/ 4

TEHNOLOGII JAVA

PENTRU DEZVOLTAREA APLICAIILOR


LUCRARE DE LABORATOR 8

Clase si metode abstracte in Java


I.

SCOPUL LUCRRII

Lucrarea de fa are rolul de a prezenta i familiariza studentul cu noiunea


fundamental a limbajului Java - clase abstracte, cu importana i utilizarea corect a
acestora.
La sfritul acestei lucrri, studentul va avea posibilitatea s scrie programe Java
n care s utilizeze noiunile nvate.

II.

NOIUNI TEORETICE

1. Clase abstracte
Vezi Curs 8, pentru consultarea noiunilor teoretice.
Cateodat avem nevoie s declarm o clas, dar nu tim cum s definim toate
metodele care aparin clasei. De exemplu, sa ncercm s declarm o clas numit
Mamifer n care s includem o metoda membru numit MarcheazaTeritoriul().
Oricum, nu tim cum s scriem MarcheazaTeritoriul() pentru ca aceasta se ntmpl
diferit n funcie de specia de Mamifer. Bineneles, o s rezolvm acest lucru derivnd
subclase din clasa Mamifer, clase cum ar fi Maimuta i Om. Dar ce cod s conin
funcia MarcheazaTeritoriul() din clasa Mamifer?
n Java funcia MarcheazaTeritoriul() se poate declara n clasa Mamifer ca
fiind o metod abstract. Fcnd aceasta se permite declararea metodei fr a scrie cod
pentru subclase. Se va scrie ns cod n subclase.
Dac o metod este declarat abstract, atunci i clasa trebuie declarat abstract.
Pentru Mamifer i subclasele sale, acest lucru nseamn c trebuie s arate dup cum
urmeaz:
abstract class Mamifer {
abstract void MarcheazaTeritoriul();
}
public class Om extends Mamifer {
public void MarcheazaTeritoriul() {
//cod prin care se marcheaza teritoriul construind un gard
}
}

public class UnMembruAlGastii extends Mamifer {


public void MarcheazaTeritoriul() {
//cod prin care se marcheaza teritoriul cu graffiti
}
}
public class Maimuta extends Mamifer {
public void MarcheazaTeritoriul() {
//cod prin care se marcheaza teritoriul cu frunze si crengi
}
}

n declaraiile precedente, clasa Mamifer nu conine nici un fel de cod pentru


MarcheazaTeritoriul(). Clasa Om poate conine cod despre cum omul marcheaz
teritoriul construind un gard n jurul lui, n timp ce clasa UnMembruAlGastii poate
conine cod despre cum acesta i marcheaz teritoriul pictnd cu spray graffiti. Clasa
Maimuta ii va marca teritoriul cu ajutorul crengilor (sau altfel).

1.1.

Clase abstracte: Interfee

Tipic, o clas abstract va avea cteva metode declarate abstract i altele care nu
sunt declarate astfel. Dac se declar o clas care este n totalitate abstract, atunci se
declar ceea ce n Java este cunoscut sub numele de interfa. O interfa este o clas
abstract n ntregime. Se pot deriva clase dintr-o interfa ntr-o manier complet
analoag cu aceea a derivrii claselor din alte clase.
Ca exemplu, s presupunem c dezvoltm o aplicaie care trebuie s afieze ora.
Utilizatorii vor avea dou opiuni pentru a obine aceast informaie. Pot s o preia dintrun ceas electronic sau dintr-un ceas cu limbi. S-ar putea implementa ca mai jos:
interface Ceas {
public String CitesteTimpul(int ora);
}
class CeasCuLimbi implements Ceas {
public String CitesteTimpul(int ora) {
StringBuffer str = new StringBuffer();
for (int i=0; i < ora; i++)
str.append("CeasCuLimbi ");
return str.toString();
}
}
class CeasElectronic implements Ceas {
public String CitesteTimpul(int ora) {
return new String("Este ora " + hour + ":00");
}
}

In acest exemplu, Ceas este o interfa care furnizeaz o singur funcie,


CitesteTimpul(). Aceasta nseamn c orice clas care este derivat (sau, n alte cuvinte,
implementat - implements) din interfaa Ceas trebuie s implementeze o funcie
CitesteTimpul(). CeasCuLimbi este un exemplu de clas care implementeaz Ceas, i
si observm c n loc de class CeasCuLimbi extends Ceas, sintaxa care ar fi trebuit

folosit n cazul n care Ceas ar fi fost o clas abstract, este folosita sintaxa class
CeasCuLimbi implements Ceas.
Pentru c CeasCuLimbi implementeaz interfaa Ceas, ea furnizeaz o funcie
CitesteTimpul(). Clasa CeasElectronic implementeaz de asemenea Ceas i furnizeaz
o funcie CitesteTimpul().
Interfeele i superclasele nu se exclud reciproc. O clas nou poate fi derivat
dintr-o superclas i poate implementa una sau mai multe interfee. Acest lucru se poate
efectua ca mai jos, pentru o clas care implementeaz doua interfee i are o superclas:
class SubClasaMea extends SuperClasaMea implements
PrimaInterfata, ADouaInterfata
{
// implementarea clasei
}

Pentru c este posibil ca o clas s implementeze mai mult de o interfa,


interfeele reprezint o alternativ pentru motenirea multipl, care nu este permis n
Java.

1.2. Metode abstracte


Metodele abstracte sunt metode care nu au corp de implementare. Ele sunt
declarate numai pentru a fora subclasele, care se vor instania, s implementeze
metodele respective.
Metodele abstracte trebuie declarate numai n interiorul claselor care au fost
declarate abstracte. Altfel compilatorul va semnala o eroare de compilare. Orice subclas
a claselor abstracte care nu este declarat abstract trebuie s ofere o implementare a
acestor metode, altfel va fi generat o eroare de compilare.
Prin acest mecanism ne asigurm c toate instanele care pot fi convertite ctre
clasa care conine definiia unei metode abstracte au implementat metoda respectiv dar,
n acelai timp, nu este nevoie s implementm n nici un fel metoda chiar n clasa care o
declar, deoarece nu tim pe moment cum va fi implementat.
O metod static nu poate fi declarat i abstract pentru c o metod static este
implicit final i nu poate fi rescris.

III.

MODUL DE LUCRU

1. Se editeaz codul surs al programului Java folosind un editor de text disponibil(de


ex., se poate utiliza Notepad).
2. Se salveaz fiierul cu extensia .java. Fiierul trebuie salvat la urmtoarea locaie:
c:\JBulider7\jdk1.3.1\bin
3. Compilarea mini-aplicaiei Java se va face din linia de comand. Se poate proceda
astfel. Se deschide o fereastr MS-Dos: Start ->Run, se tiprete command n csua
de text i se apas butonul OK. Printr-o schimbare de directoare i subdirectoare se
trece la locaia: c:\JBulider7\jdk1.3.1\bin. Sau, se lanseaz WindowsCommander.
Se trece la locaia c:\JBulider7\jdk1.3.1\bin. Se deschide o fereastr MS-Dos:
Commander ->Run Dos.

4. Pentru compilare, se tiprete la prompter javac nume_fiier_surs.java i se apas


Enter. De ex., dac fiierul se numete Test.java, se va scrie javac Test.java. n cazul
n care programul conine erori acestea vor fi semnalate i afiate n fereastra
MS-Dos, dup care va apare iar prompter-ul. Dac programul nu conine erori i
compilarea se face cu succes, atunci va apare numai prompter-ul.
5. Pentru rularea aplicaiei Java, se lanseaz interpretorul Java. Se tiprete la prompter
urmtoarea comand java nume_clas_care_conine_main i se apas Enter. De
ex., dac clasa din program care conine metoda main( ) se numete Test, se va scrie
java Test.

IV.

TEM

1. Se vor parcurge toate exemplele prezentate n platforma de laborator testndu-se


practic si explicnd rezultatele obinute.
2. Implementai clasa Mamifer din cadrul exemplului de mai sus astfel:
- scriei codul pentru implementarea metodei: public void MarcheazaTeritoriul(),
n fiecare din clasele: Om, UnMembruAlGastii, Maimuta;
- ncercai s apelai metoda: public void MarcheazaTeritoriul(), n cadrul
claselor, i din afara lor.
Explicai, la fiecare caz n parte, rezultatele obinute.

S-ar putea să vă placă și