220 likes | 431 Views
Programare Orientata Obiect. Curs 4 Pachete Incapsularea datelor. Continutul cursului. Introducere Platforma Java, Clase si Obiecte Modificatori, Constructori Pachete. Incapsularea datelor. Curs 4. Folosirea lui this Pachete 2.1 Generalitati 2.2 Importul claselor
E N D
Programare Orientata Obiect Curs4 Pachete Incapsularea datelor Curs 4
Continutul cursului • Introducere • Platforma Java, Clase si Obiecte • Modificatori, Constructori • Pachete. Incapsularea datelor Curs 4
Curs 4 • Folosirealuithis • Pachete 2.1 Generalitati 2.2 Importulclaselor 2.3 Creareapachetelor • Incapsulareadatelor • Conventii de nume Curs 4
idNum: name: idNum: name: nextID = nextID = sun sun idNum: name: earth nextID = C4. This class Body { private long idNum; private String name= “empty”; private static long nextID = 0; Body( ) { idNum = nextID++; } Body(String bodyName) { idNum= nextID++; //se executaaceeasiintructiune ca pentru //primul constructor name = bodyName; } } • Body sun = new Body( ); Body sun = new Body(“Sol”); • Body earth = new Body(“Earth); 1. Folosirea lui this 0 1 0 empty Sol Earth 1 1 2
idNum: name: idNum: name: nextID = nextID = sun sun idNum: name: earth nextID = C4. This class Body { private long idNum; private String name= “empty”; private static long nextID = 0; Body( ) { idNum = nextID++; } Body(String bodyName) { this(); // se apeleazaconstructorul de maisus name = bodyName; } } • Body sun = new Body( ); Body sun = new Body(“Sol”); • Body earth = new Body(“Earth); 1. Folosirea lui this 0 1 0 empty Sol Earth 1 1 2
idNum: name: idNum: name: nextID = nextID = sun sun idNum: name: earth nextID = C4. 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 clasacurenta } } • Body sun = new Body( ); Body sun = new Body(“Sol”); • Body earth = new Body(“Earth); 1 Folosirea lui this 0 1 0 empty Sol Earth 1 1 2
idNum: name: idNum: name: nextID = nextID = sun sun idNum: name: earth nextID = C4. 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); 1. Folosirea lui this 0 1 0 empty Sol Earth 1 1 2
idNum: name: idNum: name: nextID = nextID = sun sun idNum: name: earth nextID = C4. 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); 1. Folosirea lui this 0 1 0 empty Sol Earth 1 1 2
C4. Pachete 2.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 Curs 4
C4. Pachete 2.2 Importulclaselor • Existadouametode de accesare a claselorpublicedintr-un alt pachet: • Prinfolosireanumeluicomplet al pachetuluiinainteanumeluiclasei:java.util.Date today = new java.util.Date( ); • Folosindintructiuneaimport in partea de sus a fisierelorcecontincodulsursa. In acestcaz nu maiestenevoie de folosireanumeluipachetuluiinainte de numeleclasei • Se poateimportadoar o clasa din pachet: import java.util.Date; Date today = new Date( ); • Se pot importatoateclasele din pachet: import java.util.*; Date today = new Date( ); Curs 4
C4. Pachete • 2.2 Importulclaselor • Instructiuneaimport faciliteazaaccesuldoar la clasele din pachetulcurent, nu si la clasele din sub-pachete import javax.swing.*; public class SampleClass { MenuEvent c; } %> javac SampleClass.java SampleClass.java:4: cannot find symbol Symbol : class MenuEvent Location: class SampleClass MenuEvent c; ^ 1 error 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.*;
C4. Pachete • 2.2 Importulclaselor • Ce se intampla in cazulunui conflict de nume? Exemplu: import java.util.*; import java.sql.*; Date today = new Date( ); //Eroare:java.util.Date //saujava.sql.Date? • Dacaestenecesaradoarunadintreclaseatuncitrebuieimportata explicit import java.util.*; import java.sql.*; import java.util.Date; Date today = new Date( ); // java.util.Date • Dacasuntfolositeambeleatuncitrebuiefolositnumelepachetuluiinainteanumeluiclasei: import java.util.*; import java.sql.*; java.sql.Date today = new java.sql.Date( ); java.util.DatenextDay = new java.util.Date( );
C4. Pachete • 2.2 Importulclaselor • In cazulmetodelorstaticeestenecesarafolosireanumeluiclasei import java.lang.Math; public class importTest { double x = sqrt(1.44); } %> javac importTest.java importTest.java:3: cannot find symbol symbol : method sqrt(double) location: class importTest double x = sqrt(1.44); ^ 1 error ? Corect: Math.sqrt(1.44);
C4. Pachete 2.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. Curs 3
C4. Pachete • Adaugareauneiclaseintr-un pachet: • Se punenumelepachetului in partea de sus a fisieruluisursa: • Se punefisierul in directorul care se potriveste cu numelepachetului: in fisierul “Employee.java” stocat in directorul “somePath/com/hostname/corejava/” 2.3 Crearea pachetelor package com.hostname.corejava; public class Employee { . . . } Curs 3
C4. Pachete 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: toatecampurilesunt “expuse”, putandfifolisite de “toatalumea” 3. Incapsularea datelor Curs 4
C4. Pachete • O versiuneimbunatatita: 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 fiaccesatecampurile? 3. Incapsularea datelor Curs 4
C4. Pachete • O versiuneimbunatatita 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: CampurileidNum, namesiorbitssunt read-only din afaraclasei. 3. Incapsularea datelor Curs 4
C4. Pachete • O versiune cu metode de accesaresimetode 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:Campurilenamesiorbits pot fimodificateprinintermediulmetodelor de setare, daridNumeste in continuare read-only. 3. Incapsularea datelor Curs 4
C4. Pachete 4 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 . . . Curs 4
Continutul cursului • Introducere • Platforma Java, Clase si Obiecte • Modificatori, Constructori • Pachete. Incapsularea datelor • Mostenire Curs 4