Sunteți pe pagina 1din 11

Ministerul Educa iei din Republica Moldova Universitatea de Stat din Moldova Facultatea Matematic si Informatic Catedra Tehnologii

de programare

Lucrarea de laborator nr. 1 la disciplina Tehnologii avansate de programare Tema: Realizarea claselor n Java

A efectuat : Palancica Pavel Grupa I-22 A verificat : Opinc Carolina Lector universitar

Chi in u 2010 Condi ia lucr rii: S se creeze clasa Transport cu cteva cmpuri. Cmpuri obligatorii: - un cmp ntreg, care s indice num rul total de pasageri posibili; - un vector dinamic, n care se p streaz greutatea fic rui pasager; - un cmp ntreg static, n care se va p stra num rul de obiecte ale clasei create. Cmpuri op ionale: marca, tipul (avion, troleibuz, rutier ), .a. S se descrie trei tipuri de constructori ai acestei clase (cu alocare dinamic a memoriei): - constructorul implicit (f r parametri) toate datele se citesc de la tastatur ; - c iva constructori cu diferi i parametri; - constructorul de copiere. S se defineasc func iile de acces la cmpurile clasei i func iile de modificare a cmpurilor. S se defineasc func ia de afi are la ecran a tuturor cmpurilor clasei. S se defineasc func ia de de comparare a dou tipuri de transport (dou exemplare ale clasei) dup num rul de pasageri. S se defineasc func ia de de comparare a dou tipuri de transport dup greutatea total . n func ia main() de creat diferite tipuri de transport comun, utiliznd to i constructorii defini i. Dup crearea fiec rui exemplar nou al clasei transport, de afi at la ecran cmpurile lor cu ajutorul metodei corespunz toare a clasei. S se compare num rul de pasageri a ctorva perechi de mijloace de transport cu func iile corespunz toare ale clasei. Rezultatele compar rii s se afi eze la ecran. S se compare greutatea total a ctorva perechi de mijloace de transport cu func iile corespunz toare ale clasei. Rezultatele compar rii s se afi eze la ecran. S se creeze un vector dinamic de obiecte ale clasei. S se ini ializeze vectorul pe p r i, utiliznd diferite tipuri de constructori. n ciclu s se afi eze informa ia despre fiecare element al vectorului. n ultimul rnd s se afi eze num rul de obiecte create.

Listingul programului:
// fisierul Transport.java

import java.io.*; class Transport { private short numarPasageri; private byte greutatePasager[]; private static byte numarObiecte; private String marcaTransport = "Sprinter"; private String tipTransport = "Rutiera"; Transport() throws IOException { BufferedReader scan = new BufferedReader(new InputStreamReader(System.in)); System.out.print("\nIntrodu numarul de pasageri: "); numarPasageri = Short.parseShort(scan.readLine()); greutatePasager = new byte[numarPasageri]; System.out.print("Introdu greutatea fiecarui pasager:\n"); for (int i = 0; i < numarPasageri; i++) { System.out.print("Greutatea pasagerului " + (i + 1) + ": "); greutatePasager[i] = Byte.parseByte(scan.readLine()); } setNumarObiecte(); } Transport(short numar) throws IOException { BufferedReader scan = new BufferedReader(new InputStreamReader(System.in)); numarPasageri = numar; greutatePasager = new byte[numarPasageri]; System.out.println("\nSunt " + numar + " pasageri\n"); System.out.print("Introdu greutatea fiecarui pasager:\n"); for (int i = 0; i < numarPasageri; i++) { System.out.println("Greutatea pasagerului " + (i + 1) + ": "); greutatePasager[i] = Byte.parseByte(scan.readLine()); } setNumarObiecte(); } Transport(short numar, byte greutate[])

{ numarPasageri = numar; greutatePasager = new byte[numarPasageri]; for (int i = 0; i < numar; i++) greutatePasager[i] = greutate[i]; setNumarObiecte(); } Transport(short numar, byte greutate[], String marca, String tip) { numarPasageri = numar; greutatePasager = new byte[numarPasageri]; for (int i = 0; i < numar; i++) greutatePasager[i] = greutate[i]; marcaTransport = marca; tipTransport = tip; setNumarObiecte(); } Transport(Transport altObiect) { numarPasageri = altObiect.numarPasageri; greutatePasager = new byte[numarPasageri]; for (int i = 0; i < numarPasageri; i++) greutatePasager[i] = altObiect.greutatePasager[i]; marcaTransport = altObiect.marcaTransport; tipTransport = altObiect.tipTransport; setNumarObiecte(); }

public short getNumarPasageri() { return numarPasageri; } public void setNumarPasageri(short numar) { numarPasageri = numar; greutatePasager = null; greutatePasager = new byte[numarPasageri]; } public byte getGreutatePasager(short i) { return greutatePasager[i]; } public void setGreutatePasager(short i, byte greutate) { greutatePasager[i] = greutate; }

public static byte getNumarObiecte() { return numarObiecte; } private void setNumarObiecte() { numarObiecte++; }

public String getMarcaTransport() { return marcaTransport; } public void setMarcaTransport(String marcaTransport) { this.marcaTransport = marcaTransport; }

public String getTipTransport() { return tipTransport; } public void setTipTransport(String tipTransport) { this.tipTransport = tipTransport; } public int masaTotalaPasageri() { int suma = 0; for (int i = 0; i < numarPasageri; i++) { suma += greutatePasager[i]; } return suma; } public void afisare() { System.out.println("\nNumarul de pasageri: " + numarPasageri); System.out.println("\nGreutatea pasagerilor:\n"); for (int i = 0; i < numarPasageri; i++) { System.out.print("Pasager[" + (int)(i+1)); System.out.println("] are " + greutatePasager[i] + " kilograme"); } if (marcaTransport != "") {

System.out.println("\nMarca transportului: " + marcaTransport); } if (tipTransport != "") { System.out.println("\nTipul transportului: " + tipTransport); } System.out.println("------------------------------------"); } public static void comparareDupaLocuri(Transport obiect1, Transport obiect2) { System.out.print("\nDupa numarul de pasageri, transportul" + " cu marca " + obiect1.getMarcaTransport()); if (obiect1.numarPasageri < obiect2.numarPasageri) { System.out.println(" este mai mic decit cel cu " + "marca " + obiect2.getMarcaTransport()); } else if (obiect1.numarPasageri > obiect2.numarPasageri) { System.out.println(" este mai mare decit cel cu " + "marca " + obiect2.getMarcaTransport()); } else { System.out.print(" este egal cu cel cu marca " + obiect2.getMarcaTransport()); } } public static void comparareDupaMasaTotala(Transport obiect1, Transport obiect2) { System.out.print("\nDupa masa totala , transportul cu" + " marca " + obiect1.getMarcaTransport()); if (obiect1.masaTotalaPasageri() < obiect2.masaTotalaPasageri()) { System.out.println(" este mai mic decit cel cu " + "marca " + obiect2.getMarcaTransport()); } else if (obiect1.masaTotalaPasageri() > obiect2.masaTotalaPasageri()) { System.out.println(" este mai mare decit cel cu " + "marca " + obiect2.getMarcaTransport()); } else { System.out.print(" este egal cu cel cu marca " + obiect2.getMarcaTransport()); }

public static void main(String args[]) throws IOException { Transport a = new Transport(); a.afisare(); Transport b = new Transport((short)3); b.afisare(); byte x[] = {56, 120, 89, 60, 75}; Transport c = new Transport((byte)x.length, x); c.afisare(); byte y[] = {78,65,98,76}; Transport d = new Transport((byte)y.length, y, "Concorde", "Avion" ); d.afisare(); Transport e = new Transport(c); e.setMarcaTransport("Sprinter"); e.setTipTransport("Rutiera"); e.afisare(); comparareDupaLocuri(a, b); comparareDupaLocuri(c, d); comparareDupaMasaTotala(b, d); comparareDupaMasaTotala(c, e); byte u[] = {67, 90, 87}; byte v[] = {76, 55, 90, 84}; Transport vector[] = new Transport[5]; vector[0] = new Transport(); vector[1] = new Transport((short)2); vector[2] = new Transport((byte)u.length, u); vector[3] = new Transport((byte)v.length, v, "Boeing", "Avion"); vector[4] = new Transport(vector[0]); for (int i = 0; i < vector.length; i++) { vector[i].afisare(); } System.out.println("\nNumarul de obiecte create in" + " program este: " + getNumarObiecte()); } }

Rezultatele execu iei programului:


Microsoft Windows [Version 6.0.6001] Copyright (c) 2006 Microsoft Corporation. C:\Users\Pavel>javac Transport.java C:\Users\Pavel>java Transport Introdu numarul de pasageri: 2 Introdu greutatea fiecarui pasager: Greutatea pasagerului 1: 76 Greutatea pasagerului 2: 65 Numarul de pasageri: 2 Greutatea pasagerilor: Pasager[1] are 76 kilograme Pasager[2] are 65 kilograme Marca transportului: Sprinter Tipul transportului: Rutiera -----------------------------------Sunt 3 pasageri Introdu greutatea fiecarui pasager: Greutatea pasagerului 1: 84 Greutatea pasagerului 2: 91 Greutatea pasagerului 3: 69 Numarul de pasageri: 3 Greutatea pasagerilor: Pasager[1] are 84 kilograme Pasager[2] are 91 kilograme Pasager[3] are 69 kilograme Marca transportului: Sprinter Tipul transportului: Rutiera -----------------------------------Numarul de pasageri: 5 Greutatea pasagerilor: Pasager[1] Pasager[2] Pasager[3] Pasager[4] are are are are 56 kilograme 120 kilograme 89 kilograme 60 kilograme All rights reserved.

Pasager[5] are 75 kilograme Marca transportului: Sprinter Tipul transportului: Rutiera -----------------------------------Numarul de pasageri: 4 Greutatea pasagerilor: Pasager[1] Pasager[2] Pasager[3] Pasager[4] are are are are 78 65 98 76 kilograme kilograme kilograme kilograme

Marca transportului: Concorde Tipul transportului: Avion -----------------------------------Numarul de pasageri: 5 Greutatea pasagerilor: Pasager[1] Pasager[2] Pasager[3] Pasager[4] Pasager[5] are are are are are 56 kilograme 120 kilograme 89 kilograme 60 kilograme 75 kilograme

Marca transportului: Sprinter Tipul transportului: Rutiera -----------------------------------Dupa numarul de pasageri, transportul cu marca Sprinter este mai mic decit cel cu marca Sprinter Dupa numarul de pasageri, transportul cu marca Sprinter este mai mare decit cel cu marca Concorde Dupa masa totala , transportul cu marca Sprinter este mai mic decit cel cu marca Concorde Dupa masa totala , transportul cu marca Sprinter este egal cu cel cu marca Sprinter Introdu numarul de pasageri: 3 Introdu greutatea fiecarui pasager: Greutatea pasagerului 1: 60 Greutatea pasagerului 2: 75 Greutatea pasagerului 3: 63 Sunt 2 pasageri Introdu greutatea fiecarui pasager: Greutatea pasagerului 1: 72 Greutatea pasagerului 2: 95

Numarul de pasageri: 3 Greutatea pasagerilor: Pasager[1] are 60 kilograme Pasager[2] are 75 kilograme Pasager[3] are 63 kilograme Marca transportului: Sprinter Tipul transportului: Rutiera -----------------------------------Numarul de pasageri: 2 Greutatea pasagerilor: Pasager[1] are 72 kilograme Pasager[2] are 95 kilograme Marca transportului: Sprinter Tipul transportului: Rutiera -----------------------------------Numarul de pasageri: 3 Greutatea pasagerilor: Pasager[1] are 67 kilograme Pasager[2] are 90 kilograme Pasager[3] are 87 kilograme Marca transportului: Sprinter Tipul transportului: Rutiera -----------------------------------Numarul de pasageri: 4 Greutatea pasagerilor: Pasager[1] Pasager[2] Pasager[3] Pasager[4] are are are are 76 55 90 84 kilograme kilograme kilograme kilograme

Marca transportului: Boeing Tipul transportului: Avion -----------------------------------Numarul de pasageri: 3 Greutatea pasagerilor: Pasager[1] are 60 kilograme Pasager[2] are 75 kilograme

Pasager[3] are 63 kilograme Marca transportului: Sprinter Tipul transportului: Rutiera -----------------------------------Numarul de obiecte create in program este: 10 C:\Users\Pavel>

Concluzii: Prezenta lucrare de laborator a fost realizat utiliznd uneltele JDK (Java Development Kit), i fereastra sistemului MS-DOS (command prompt). Am nsu it cum se utilizeaz compilatorul javac din linia de comand , cum se creaz fi ierele bytecode pentru fiecare clas aparte i cum se ruleaz programul principal. Programarea n limbajul Java se aseam n foarte mult cu limbajul C/C++ n ceea ce prive te tipurile de date primitive, descrierea claselor, a constructorilor, a cmpurilor i func iilor membre. Un plus enorm este adus de Java prin introducerea Colectorului de gunoaie, care ne scute te de grija faptului cnd i unde trebuie eliberat memoria pentru diferite obiecte. Lucrarea de fa are un neajuns cauzat de cerin ele problemei. Cu toate c cmpurile clasei sunt declarate private, ele pot fi accesate direct din cadrul func iei main(). Aceasta se datoreaz faptului c , spre deosebire de limbajul C++, n Java orice func ie sau cmp se descrie n cadrul unei oarecare clase. Func ia main() nu face excep ie de la acest lucru i, neavnd n program alt clas n afar de clasa Transport, sntem nevoi i s o definim n interiorul acesteia, ceea ce o face automat s devin o func ie membr a acestei clase i, respectiv, s aib acces la orice cmp, indiferent de tipul de acces al acestuia.

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