Download - Programare Orientata Obiect
![Page 1: Programare Orientata Obiect](https://reader036.vdocumente.com/reader036/viewer/2022062322/568147b3550346895db4f7b2/html5/thumbnails/1.jpg)
04/21/23 Curs 4 1
Programare Orientata Obiect
Curs 4Pachete
Incapsularea datelor
![Page 2: Programare Orientata Obiect](https://reader036.vdocumente.com/reader036/viewer/2022062322/568147b3550346895db4f7b2/html5/thumbnails/2.jpg)
04/21/23 Curs 4 2
Continutul cursului1. Introducere2. Platforma Java, Clase si Obiecte3. Modificatori, Constructori4. Pachete. Incapsularea datelor
![Page 3: Programare Orientata Obiect](https://reader036.vdocumente.com/reader036/viewer/2022062322/568147b3550346895db4f7b2/html5/thumbnails/3.jpg)
04/21/23 Curs 4 3
Curs 4
1. Folosirea lui this2. Pachete
2.1 Generalitati2.2 Importul claselor2.3 Crearea pachetelor
3. Incapsularea datelor4. Conventii de nume
![Page 4: Programare Orientata Obiect](https://reader036.vdocumente.com/reader036/viewer/2022062322/568147b3550346895db4f7b2/html5/thumbnails/4.jpg)
4
C4. This1. Folosirea lui this
class Body {private long idNum;private String name= “empty”;private static long nextID = 0;
Body( ) {idNum = nextID++;
}
Body(String bodyName) {idNum = nextID++; //se executa aceeasi intructiune ca
pentru //primul constructorname = bodyName;
}}
Body sun = new Body( ); Body sun = new Body(“Sol”);Body earth = new Body(“Earth);
idNum: name:sun
nextID =
idNum: name: sun
nextID =
idNum:name: earth
nextID =
0empty
1
0Sol
1Earth
1 2
![Page 5: Programare Orientata Obiect](https://reader036.vdocumente.com/reader036/viewer/2022062322/568147b3550346895db4f7b2/html5/thumbnails/5.jpg)
5
C4. This1. Folosirea lui this
class Body {private long idNum;private String name= “empty”;private static long nextID = 0;
Body( ) {idNum = nextID++;
}
Body(String bodyName) {this(); // se apeleaza constructorul de mai susname = bodyName;
}}
Body sun = new Body( ); Body sun = new Body(“Sol”);Body earth = new Body(“Earth);
idNum: name:sun
nextID =
idNum: name: sun
nextID =
idNum:name: earth
nextID =
0empty
1
0Sol
1Earth
1 2
![Page 6: Programare Orientata Obiect](https://reader036.vdocumente.com/reader036/viewer/2022062322/568147b3550346895db4f7b2/html5/thumbnails/6.jpg)
6
C4. This1 Folosirea lui this
class Body {private long idNum;private String name= “empty”;private static long nextID = 0;
Body( ) {idNum = nextID++;
}
Body(String bodyName) {idNum = nextID++;this.name = bodyName; //this se refera la clasa curenta
}}
Body sun = new Body( ); Body sun = new Body(“Sol”);Body earth = new Body(“Earth);
idNum: name:sun
nextID =
idNum: name: sun
nextID =
idNum:name: earth
nextID =
0empty
1
0Sol
1Earth
1 2
![Page 7: Programare Orientata Obiect](https://reader036.vdocumente.com/reader036/viewer/2022062322/568147b3550346895db4f7b2/html5/thumbnails/7.jpg)
7
C4. This1. Folosirea lui this
class Body {private long idNum;private String name= “empty”;private static long nextID = 0;
Body( ) {idNum = nextID++;
}
Body(String name) {idNum = nextID++;this.name = name; //paramentrul din constructor are acelasi
//nume cu proprietatea}
}
Body sun = new Body( ); Body sun = new Body(“Sol”);Body earth = new Body(“Earth);
idNum: name:sun
nextID =
idNum: name: sun
nextID =
idNum:name: earth
nextID =
0empty
1
0Sol
1Earth
1 2
![Page 8: Programare Orientata Obiect](https://reader036.vdocumente.com/reader036/viewer/2022062322/568147b3550346895db4f7b2/html5/thumbnails/8.jpg)
8
C4. This1. Folosirea lui this
class Body {private long idNum;private String name= “empty”;private static long nextID = 0;
Body( ) {idNum = nextID++;
}
Body(String name) {this();this.name = name;
}}
Body sun = new Body( ); Body sun = new Body(“Sol”);Body earth = new Body(“Earth);
idNum: name:sun
nextID =
idNum: name: sun
nextID =
idNum:name: earth
nextID =
0empty
1
0Sol
1Earth
1 2
![Page 9: Programare Orientata Obiect](https://reader036.vdocumente.com/reader036/viewer/2022062322/568147b3550346895db4f7b2/html5/thumbnails/9.jpg)
04/21/23 Curs 4 9
C4. Pachete2.1 Generalitati
– Clasele pot fi grupate in pachete (en. package)
– Clasele din libraria standard Java sunt grupate in pachete, cum ar fi java.lang si java.util
http://docs.oracle.com/javase/7/docs/api/index.html
– Principalul motiv pentru folosirea pachetelor: unicitatea de nume a claselor
• Clase cu acelasi nume pot sa fie grupate in pachete diferite
![Page 10: Programare Orientata Obiect](https://reader036.vdocumente.com/reader036/viewer/2022062322/568147b3550346895db4f7b2/html5/thumbnails/10.jpg)
04/21/23 Curs 4 10
C4. Pachete2.2 Importul claselor
– Exista doua metode de accesare a claselor publice dintr-un alt pachet:
1. Prin folosirea numelui complet al pachetului inaintea numelui clasei:
java.util.Date today = new java.util.Date( );
2. Folosind intructiunea import in partea de sus a fisierelor ce contin codul sursa. In acest caz nu mai este nevoie de folosirea numelui pachetului inainte de numele clasei
Se poate importa doar o clasa din pachet:import java.util.Date;Date today = new Date( );
Se pot importa toate clasele din pachet:import java.util.*;Date today = new Date( );
![Page 11: Programare Orientata Obiect](https://reader036.vdocumente.com/reader036/viewer/2022062322/568147b3550346895db4f7b2/html5/thumbnails/11.jpg)
import javax.swing.*;
public class SampleClass {
MenuEvent c;
}%> javac SampleClass.java
MenuEvent este o clasa din pachetul javax.swing.event, care se gaseste in pachetul javax.swing. Pentru a se compila e nevoie si de: import javax.swing.event.*;
SampleClass.java:4: cannot find symbolSymbol : class MenuEventLocation: class SampleClass MenuEvent c; ^1 error
C4. Pachete2.2 Importul claselor
– Instructiunea import faciliteaza accesul doar la clasele din pachetul curent, nu si la clasele din sub-pachete
![Page 12: Programare Orientata Obiect](https://reader036.vdocumente.com/reader036/viewer/2022062322/568147b3550346895db4f7b2/html5/thumbnails/12.jpg)
C4. Pachete2.2 Importul claselor
– Ce se intampla in cazul unui conflict de nume?Exemplu:
import java.util.*;import java.sql.*;Date today = new Date( ); //Eroare:java.util.Date
//sau java.sql.Date?
Daca este necesara doar una dintre clase atunci trebuie importata explicit
import java.util.*;import java.sql.*;import java.util.Date;Date today = new Date( ); //
java.util.Date
Daca sunt folosite ambele atunci trebuie folosit numele pachetului inaintea numelui clasei:
import java.util.*;import java.sql.*;java.sql.Date today = new java.sql.Date( );java.util.Date nextDay = new
java.util.Date( );
![Page 13: Programare Orientata Obiect](https://reader036.vdocumente.com/reader036/viewer/2022062322/568147b3550346895db4f7b2/html5/thumbnails/13.jpg)
import java.lang.Math;
public class importTest {double x = sqrt(1.44);
}
%> javac importTest.javaimportTest.java:3: cannot find symbolsymbol : method sqrt(double)location: class importTestdouble x = sqrt(1.44); ^1 error
?Corect: Math.sqrt(1.44);
C4. Pachete2.2 Importul claselor
– In cazul metodelor statice este necesara folosirea numelui clasei
![Page 14: Programare Orientata Obiect](https://reader036.vdocumente.com/reader036/viewer/2022062322/568147b3550346895db4f7b2/html5/thumbnails/14.jpg)
04/21/23 Curs 3 14
C4. Pachete2.3 Crearea pachetelor
– Crearea unui pachet se realizeaza prin scrierea la inceputul fisierelor sursa a instructiunii:
package numePachet;– Instructiunea package actioneaza asupra
intregului fisier sursa la inceputul caruia apare. – Daca nu este specificat un anumit pachet, clasele
unui fisier sursa vor face parte din pachetul implicit (care nu are nici un nume). In general, pachetul implicit este format din toate clasele si intefetele directorului curent de lucru.
![Page 15: Programare Orientata Obiect](https://reader036.vdocumente.com/reader036/viewer/2022062322/568147b3550346895db4f7b2/html5/thumbnails/15.jpg)
04/21/23 Curs 3 15
C4. Pachete2.3 Crearea pachetelor
• Adaugarea unei clase intr-un pachet:1. Se pune numele pachetului in partea de sus a fisierului sursa:
2. Se pune fisierul in directorul care se potriveste cu numele pachetului:
in fisierul “Employee.java” stocat in directorul “somePath/com/hostname/corejava/”
package com.hostname.corejava;
public class Employee {. . .
}
![Page 16: Programare Orientata Obiect](https://reader036.vdocumente.com/reader036/viewer/2022062322/568147b3550346895db4f7b2/html5/thumbnails/16.jpg)
04/21/23 Curs 4 16
C4. Pachete3. Incapsularea datelor
public class Body {public long idNum;public String name = “<unnamed>”;public Body orbits = null;public static long nextID = 0;
Body( ) {idNum = nextID++;
}
Body(String bodyName, Body orbitsAround) {this( );name = bodyName;orbits = orbitsAround;
}}
Problema: toate campurile sunt “expuse”, putand fi folisite de “toata lumea”
![Page 17: Programare Orientata Obiect](https://reader036.vdocumente.com/reader036/viewer/2022062322/568147b3550346895db4f7b2/html5/thumbnails/17.jpg)
04/21/23 Curs 4 17
C4. Pachete3. Incapsularea datelor• O versiune imbunatatita:
public class Body {private long idNum;private String name = “<unnamed>”;private Body orbits = null;private static long nextID = 0;
Body( ) {idNum = nextID++;
}
Body(String bodyName, Body orbitsAround) {this( );name = bodyName;orbits = orbitsAround;
}}
Problema: cum pot fi accesate campurile?
![Page 18: Programare Orientata Obiect](https://reader036.vdocumente.com/reader036/viewer/2022062322/568147b3550346895db4f7b2/html5/thumbnails/18.jpg)
04/21/23 Curs 4 18
C4. Pachete3. Incapsularea datelor• O versiune imbunatatita cu metode de accesare:
public class Body {private long idNum;private String name = “<unnamed>”;private Body orbits = null;private static long nextID = 0;Body( ) {
idNum = nextID++; }Body(String bodyName, Body orbitsAround) {
this( );name = bodyName;orbits = orbitsAround; }
public long getID() {return idNum;}public String getName() {return name;};public Body getOrbits() {return orbits;}
}
Nota: Campurile idNum, name si orbits sunt read-only din afara clasei.
![Page 19: Programare Orientata Obiect](https://reader036.vdocumente.com/reader036/viewer/2022062322/568147b3550346895db4f7b2/html5/thumbnails/19.jpg)
04/21/23 Curs 4 19
C4. Pachete3. Incapsularea datelor• O versiune cu metode de accesare si metode de
setare:class Body {
private long idNum;private String name = “<unnamed>”;private Body orbits = null;private static long nextID = 0;
//constructori …
public long getID() {return idNum;}public String getName() {return name;};public Body getOrbits() {return orbits;}
public void setName(String newName) {name = newName;}public void setOrbits(Body orbitsAround) {orbits =
orbitsAround;}}
Nota: Campurile name si orbits pot fi modificate prin intermediul metodelor de setare, dar idNum este in continuare read-only.
![Page 20: Programare Orientata Obiect](https://reader036.vdocumente.com/reader036/viewer/2022062322/568147b3550346895db4f7b2/html5/thumbnails/20.jpg)
04/21/23 Curs 4 20
C4. Pachete4 Conventii de nume
– Pachete: incep cu litera mica E.g. java.util, java.net, java.io . . .
– Clase: incep cu litara mare E.g. File, Math . . .
– Variabile, nume de metode si campuri: incep cu litera mica E.g. x, out, abs . . .
– Constante: cu litere mari E.g. PI . . .
– Nume din mai multe cuvinte: fiecare cuvant este scris cu litera mare in afara de primul care poate sa cu litera mare in cazul claselor sau cu litera mica in cazul metodelor
E.g. HelloWorldApp, getName . . .
![Page 21: Programare Orientata Obiect](https://reader036.vdocumente.com/reader036/viewer/2022062322/568147b3550346895db4f7b2/html5/thumbnails/21.jpg)
04/21/23 Curs 4 21
Continutul cursului1. Introducere2. Platforma Java, Clase si Obiecte3. Modificatori, Constructori4. Pachete. Incapsularea datelor5. Mostenire