Notiuni de POO

Ce este o clasă?

Clasa este descrierea unui element printr-un set de atribute si metode. Atributele reprezintă caracteristicile unui obiect iar metodele sunt acțiunile pe care el le poate face.

Exemplu - Clasa Masina:

Variabile:

  1. nume
  2. motorrului
  3. modelul mașinii
  4. număr de locuri

Metode:

  1. accelerează
  2. franează
  3. parchează
  4. oprește

Clasa este doar o matriță cu ajutorul căreia putem construi obiecte.

Ce este un obiect?

Clasa caracterizează în mod general un anume lucru din lumea exterioară. În exemplul de mai sus, clasa Mașină ne spune doar ce atribute și ce acțiuni caracterizează în mod general o mașină. Pentru a putea vorbi însă de o anume mașină, trebuie să creăm ceea ce se numește un obiect.

Constructorul Java este un tip special de functie, care are acelasi nume cu numele clasei in care este declarat si este utilizat pentru a initializa orice nou obiect de acel tip. Constructorul nu returnează nici o valoare, nici macar void.

Ce este o variabila de instanta?

Variabilele de instanțe sunt atributele care caracterizează obiectul. Fiecare obiect creat are propriile valori pentru atribute.

În exemplul nostru de mai sus, variabilele de instanță sunt nume, capacitatea motorului, model și numar locuri.

Ce este o metoda de instanță?

Metoda conține o serie de instrucțiuni înglobate într-o funcție prin efectuarea cărora se obține un rezultat.
În exemplu anterior, metodele sunt acțiunile pe care mașina poate să le facă: accelerează, franează, parchează, oprește.

Metoda de instanță este pentru obiecte. Pentru a putea spune mașinii să accelereze trebuie să avem mașina! Cu alte cuvinte, nu putem folosi o metoda de instanță pe o clasă (nu îi putem spune matricii cu care creăm mașini să parcheze).

Ce este o metoda de clasa?

Pentru a apela metoda unei clase nu avem nevoie de creare unui obiect deoarece este caracteristică pentru toate obiectele posibile.

De exemplu, în clasa noastra „Masina“ avem nevoie de obiectul „masină“ pentru a îi putea spune „să accelereze“, „să franeze“ pentru că accelerarea la fiecare tip de mașină este diferită și depinde de atributul „capacitateMotor“. Dar dacă un client ar vrea să știe ce înseamnă „capacitateMotor“ am crea o metodă de clasă care returnează explicația. Nu avem nevoie de un obiect de tip „Masina“ pentru a afla definiția.

Concluzie:

metoda de instanță = avem nevoie de obiect
metoda de clasă = nu avem nevoie de obiect, ci doar de clasă.

Ce sunt setterii și getteri? Care este rolul lor?

De obicei, în POO variabilele dintr-o clasă sunt protejate. Se marchează variabila ca privată și se declară metoda pentru a seta valoarea variabilei și pentru a lua valoare variabilei.

Metoda prin care se setează valoarea = setter.
Metoda prin care se ia valoarea = getter.

De ce am face așa ceva?

De exemplu, pentru a evita situația în care valoarea unei variabile este setată greșit.

Un obiect de tip Masina nu poate avea capacitateaMotorului egală cu 10000.

Asadar marcam variabila capacitateaMotorului ca privată. Aceasta nu va mai putea fi accesata astfel: bmw.capacitateaMotorului=100;. Declaram doua metode seteazaCapacitateaMotorului si iaCapacitateaMotorului.

public void seteazaCapacitateaMotorului(float capacitate)
{
      if( capacitate > 1.0 && capacitate < 100.0 ) capacitateaMotorului = capacitate;
}
 
public float iaCapacitateaMotorului()
{
      return capacitateaMotorului
}

Ce este this si la ce se foloseste?

Cuvantul cheie this se refera la instanta curenta a clasei si poate fi folosit de metodele unei clase pentru a referi obiectul curent. In general este utilizat pentru:

  • a se face diferenta intre campuri ale obiectului curent si argumente care au acelasi nume (vezi exemplul urmator)
  • a pasa ca argument unei metode o referinta catre obiectul curent
class Student {
    private String nume;
    private int medie_sem_1;
    private int medie_sem_2;
 
    // constructor 1
     public Student(String n, int medie_sem_1, int medie_sem_2) {
    	setNume(n);
		this.medie_sem_1 = medie_sem_1;
		this.medie_sem_2 = medie_sem_2;
     }
 
     // constructor 2
     public Student(String n) {
     	setNume(n);
      }
 
    // metoda calcMedieAnuala
     float calcMedieAnuala() {
       	return (getMedie_sem_1() + getMedie_sem_2())/2;
    }
 
     // setteri si getteri
     public int getMedie_sem_1() {
 		return medie_sem_1;
 	}
 
 	public void setMedie_sem_1(int medie_sem_1) {
 		this.medie_sem_1 = medie_sem_1;
 	}
 
 	public int getMedie_sem_2() {
 		return medie_sem_2;
 	}
 
 	public void setMedie_sem_2(int medie_sem_2) {
 		this.medie_sem_2 = medie_sem_2;
 	}
 
 	public String getNume() {
 		return nume;
 	}
 
 	public void setNume(String nume) {
 		this.nume = nume;
 	}
 
     public static void main(String[] args) {
    	 String n = "Mihai";
    	 int medie_1 = 8, medie_2 = 10;
         Student s = new Student(n);
         s.setMedie_sem_1(medie_1);
         s.setMedie_sem_2(medie_2);
         System.out.println("Media anuala a studentului " + s.getNume() + " este: " + s.calcMedieAnuala());
     }
}

Despre mostenire

Programarea Orientata Obiect ofera posibilitatea de a extinde comportamentul unei clase existente prin definirea unei clase noi care mosteneste continutul primei clase, adaugand la acesta elemente specifice.
Clasa existenta, care va fi mostenita se mai numeste clasa de baza sau superclasa. Clasa care realizeaza extinderea se numeste subclasa.
De exemplu putem considera superclasa om si subclasa student. Studentul este om, deci aceleasi atribute si actiuni (in poo metode) ca si omul puls unele specifice: universitate, invata() etc.

Ce sunt clasele abstracte si interfetele?

Clasele abstracte sunt tipuri de clase pentru care nu se poate obiect, ele pot fi doar mostenite de alte clase extinse din ele. Ele se declara folosind cuvantul abstract inaintea lui „class“. In clasele abstracte se definesc si metode abstracte (care nu au corp).

Interfetele duc conceptul abstract un pas mai departe. Se poate considera ca o interfata este o clasa abstracta pura.
O interfata Java defineste un set de metode dar nu specifica nici o implementare pentru ele. O clasa care implementeaza o interfata trebuie obligatoriu sa specifice implementari pentru toate metodele interfetei, supunându-se asadar unui anumit comportament.

interface Instrument {
 
    // Compile-time constant:
    int i = 5; // static & final
 
    // Cannot have method definitions:
    void play(); // Automatically public
    String what();
    void adjust();
}
 
class Suflat implements Instrument {
 
    public void play() {
        System.out.println("Suflat.play()");
    }
 
    public String what() {
        return "Suflat";
    }
 
    public void adjust() {}
}
 
class Trompeta extends Suflat {
 
    public void play() {
        System.out.println("Trompeta.play()");
    }
 
    public void adjust() {
        System.out.println("Trompeta.adjust()");
    }
}

Exercitii

  • Creati clasele StudentDinProvincie si StudentBursier ce extind clasa Student. Clasa

StudentDinProvincie va avea in plus atributul “oras_origine” iar clasa StudentBursier va avea in plus
atributul “tip_bursa”. Realizati constructorii corespunzatori claselor si modificati clasa Main pentru a testa
functionalitatea claselor create.

  • Creati clasa Dreptunghi, care sa contina:
    • atributele lungime, latime
    • 1 constructor
    • metodele arie( ), perimetru( )
    • seteri, getteri
  • Sa se realizeze o interfata FiguriGeometrice ce contine metodele arie( ) si perimetru( ) si

clasele Triunghi, Dreptunghi care implementeaza interfata. Completati in mod corespunzator corpul
functiilor.

Bonus

Construiti o clasa Pagina, cu atributele numar si continut. Clasa va contine un constructor ce primeste ca
parametri numarul si continutul. Folosindu-va de clasa creata anterior construiti o a doua clasa Carte care
sa aiba ca atribut un ArrayList cu obiecte de tip Pagina. Clasa Carte va avea si atributele dimensiune si titlu.

  • Construiti o clasa de test unde sa creati un obiect de tip pagina
  • Afisati prin getteri dimensiunea si titlul cartii
  • Creati o metoda adaugaPagina(Pagina p) in clasa Carte si adaugati pagini obiectului de tip Carte

referinta 1 referinta 2 referinta 3

introducere_android/curs/curs2.txt · Ultima modificare: 2013/08/03 18:34 de către iulia.paraicu
CC Attribution-Noncommercial-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0