Differences

This shows you the differences between two versions of the page.

Link to this comparison view

poo:breviare:breviar-03 [2018/09/22 18:08]
mihai.nan
poo:breviare:breviar-03 [2023/10/16 19:36] (current)
carmen.odubasteanu [Laborator 3 - Clase și Obiecte în Java]
Line 1: Line 1:
 ====== Breviar ====== ====== Breviar ======
 ===== Laborator 3 - Clase și Obiecte în Java ===== ===== Laborator 3 - Clase și Obiecte în Java =====
- 
-  * Responsabil:​ [[mihai.nan.cti@gmail.com|Mihai Nan]] 
-  * Profesor titular: Carmen Odubășteanu 
- 
 ==== Introducere ==== ==== Introducere ====
  ​Presupunem că dorim //să descriem//, uzitând un limbaj de programare, un **obiect** carte. În general, o carte poate fi caracterizată prin titlu, autor și editură. Cum am putea realiza această descriere formală?  ​Presupunem că dorim //să descriem//, uzitând un limbaj de programare, un **obiect** carte. În general, o carte poate fi caracterizată prin titlu, autor și editură. Cum am putea realiza această descriere formală?
Line 172: Line 168:
 Spre deosebire de C++, în Java nu există o modalitate prin care să poată fi făcută o diferențiere explicită între trimiterea parametrilor **<color red>prin referință</​color>​** și trimiterea acestora **<color blue>​prin valoare</​color>​**. Spre deosebire de C++, în Java nu există o modalitate prin care să poată fi făcută o diferențiere explicită între trimiterea parametrilor **<color red>prin referință</​color>​** și trimiterea acestora **<color blue>​prin valoare</​color>​**.
  
-Conform specificației Java (secțiunea 4.3), transmiterea tuturor datelor, atât a celor de tip obiect, cât și a celor primitive, este definită următoarea regulă:.+Conform specificației Java ([[https://​docs.oracle.com/​javase/​specs/​jls/​se9/​html/​jls-4.html#​jls-4.3|secțiunea 4.3]]), transmiterea tuturor datelor, atât a celor de tip obiect, cât și a celor primitive, este definită următoarea regulă:.
  
 <note important>​In Java argumentele sunt trimise doar **<color blue>​prin valoare</​color>​** (pass-by-value).</​note>​ <note important>​In Java argumentele sunt trimise doar **<color blue>​prin valoare</​color>​** (pass-by-value).</​note>​
Line 237: Line 233:
  System.out.println("​Some ball = " + someBall);  System.out.println("​Some ball = " + someBall);
  System.out.println("​Another ball = " + anotherBall);​  System.out.println("​Another ball = " + anotherBall);​
 + }
 +}
 +</​code>​
 +
 +<code java>
 +class Vehicle {
 +    private String name;
 +    public Vehicle(String name) {
 +        this.name = name;
 +    }
 +    public void setName(String name) {
 +        this.name = name;
 +    }
 +    public String getName() {
 +        return name;
 +    }
 +    @Override
 +    public String toString() {
 +        return "​Vehicle[name = " + name + "​]";​
 +    }
 +}
 +
 +class VehicleProcessor {
 +    public void process(Vehicle vehicle) {
 +        System.out.println("​Entered method (vehicle = " + vehicle + "​)"​);​
 +        vehicle.setName("​A changed name"​);​
 +        System.out.println("​Changed vehicle within method (vehicle = " + vehicle + "​)"​);​
 +        System.out.println("​Leaving method (vehicle = " + vehicle + "​)"​);​
 +    }
 +    public void processWithReferenceChange(Vehicle vehicle) {
 +        System.out.println("​Entered method (vehicle = " + vehicle + "​)"​);​
 +        vehicle = new Vehicle("​A new name"​);​
 +        System.out.println("​New vehicle within method (vehicle = " + vehicle + "​)"​);​
 +        System.out.println("​Leaving method (vehicle = " + vehicle + "​)"​);​
 +    }
 +}
 +
 +class Main {
 + public static void main(String args[]) {
 + VehicleProcessor processor = new VehicleProcessor();​
 + Vehicle vehicle = new Vehicle("​Some name"​);​
 + System.out.println("​Before calling method (vehicle = " + vehicle + "​)"​);​
 + processor.process(vehicle);​
 + System.out.println("​After calling method (vehicle = " + vehicle + "​)"​);​
 + processor.processWithReferenceChange(vehicle);​
 + System.out.println("​After calling reference-change method (vehicle = " + vehicle + "​)"​);​
  }  }
 } }
Line 255: Line 297:
 Dacă programatorul nu prevede într-o clasa niciun constructor,​ atunci compilatorul va genera pentru clasa respectivă un constructor implicit fără niciun argument și al cărui corp de instrucțiuni este vid. Dacă programatorul nu prevede într-o clasa niciun constructor,​ atunci compilatorul va genera pentru clasa respectivă un constructor implicit fără niciun argument și al cărui corp de instrucțiuni este vid.
 </​note>​ </​note>​
 +
 +{{ :​poo:​breviare:​default-constructor1.png |}}
  
 <note warning> <note warning>
Line 311: Line 355:
 </​note>​ </​note>​
  
-=== Supraincarcarea ​===+=== Supraîncarcarea ​===
 În Java, se pot găsi două sau mai multe metode, în cadrul aceleiași clase, care să aibă același nume, atâta timp cât argumentele lor sunt diferite. În acest caz, se spune că metoda este supraîncărcată,​ iar procedeul se numește **supraîncarcarea metodelor**. ​ În Java, se pot găsi două sau mai multe metode, în cadrul aceleiași clase, care să aibă același nume, atâta timp cât argumentele lor sunt diferite. În acest caz, se spune că metoda este supraîncărcată,​ iar procedeul se numește **supraîncarcarea metodelor**. ​
 Pentru o mai bună înțelegere a acestui principiu POO, se va oferi, în continuare, un exemplu pentru o metodă care determină maximul. Pentru o mai bună înțelegere a acestui principiu POO, se va oferi, în continuare, un exemplu pentru o metodă care determină maximul.
poo/breviare/breviar-03.1537628901.txt.gz · Last modified: 2018/09/22 18:08 by mihai.nan
CC Attribution-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