Laborator 4: Continuare Programare Orientată pe Obiecte Întocmit de: Adina Neculai Îndrumător: Asist. Drd. Gabriel Danciu 29 octombrie 2011

Documente similare
Laborator 9: Fire de execuţie Întocmit de: Adina Neculai Îndrumător: Asist. Drd. Gabriel Danciu 20 noiembrie 2011

Laborator 3

Laborator 2: Instrucţiuni Java şi lucru cu şiruri de caractere Întocmit de: Adina Neculai Îndrumător: Asist. Drd. Gabriel Danciu 18 octombrie 2011

Ingineria Sistemelor de Programare

PROGRAMARE ORIENTATA PE OBIECTE

Microsoft Word - lab4.doc

Microsoft Word _POO_Lab_1_Modificari_v01.htm

SUBPROGRAME

Poo Laboratoare 1 Contents Laborator7 2 1 Colecţii de obiecte în Java Interfaţa Iterator Interfaţa C

9. Design patterns - Singleton, Factory, Observer Scopul acestui curs este familiarizarea cu folosirea unor pattern-uri des întâlnite în design-ul atâ

Paradigme de Programare

Programarea şi utilizarea calculatoarelor

CURS

Proiectarea Sistemelor Software Complexe

Laborator Activities În sistemul Android activitățile reprezintă echivalentul ferestrelor din Windows, fiind clase care extind clasa Activity. Spre de

Ingineria Sistemelor de Programare

E_d_Informatica_sp_MI_2015_bar_02_LRO

Microsoft Word - CarteC.doc

Top

Subiectul 1

1 Lucrarea nr. 8 - Structuri de date de tip liste sortate O listă sortată reprezintă un aranjament al înregistrărilor din cadrul listei în funcţie de

ALGORITMICĂ. Seminar 3: Analiza eficienţei algoritmilor - estimarea timpului de execuţie şi notaţii asimptotice. Problema 1 (L) Să se determine număru

Declararea variabilelor

Programarea şi utilizarea calculatoarelor

Microsoft PowerPoint - Curs_SDA_9_RO_2019_v2.pptx

Slide 1

Cursul 1 1. Introducere Corpul numerelor complexe Dezvoltarea istorică a gândirii matematice a urmărit îndeaproape evoluţia ideii de număr. Această ev

Lucrarea nr. 4 - Algoritmi de sortare şi ordonare Breviar teoretic Un algoritm de sortare este o metoda prin care se aranjează elementele unui tablou

Limbaje de Programare Curs 5 – Siruri de caractere

Laborator 2 Incompatibilităţi/Diferenţe între C şi C++ Completări C++ Supraîncărcarea (redefinirea) numelui de funcţii În C nu este permisă existenţa

Laborator 2 - Încapsularea Programare Orientată pe Obiecte Tema 2.1 Să se analizeze programul EX2.C Indicatii 2.1 A nu se uita de fisierul EX2.H Tema

Microsoft PowerPoint - Curs_TPI_22_v01.ppt

L7

Ingineria Sistemelor de Programare

ALGORITMII ŞI REPREZENTAREA LOR Noţiunea de algoritm Noţiunea de algoritm este foarte veche. Ea a fost introdusă în secolele VIII-IX de către Abu Ja f

Limbaje de Programare Curs 6 – Functii de intrare-iesire

Object Oriented Programming

Microsoft PowerPoint - ImplementareLimbaj [Read-Only] [Compatibility Mode]

Curs 6 Fragments Un fragment reprezintă o porțiune dintr-un Activity. Într-un activity se pot combina mai multe fragmente ți un fragment se poate reut

Matrici și vectori în VBA În VBA, o matrice este un grup de variabile de același tip. De ce ar trebui să utilizați o matrice? Presupunem că ați vrut s

Fâciu N. Maria-Ema CASA CORPULUI DIDACTIC BRĂILA PROGRAM DE FORMARE INFORMATICĂ ȘI TIC PENTRU GIMNAZIU CLASA A V-A SERIA 1 GRUPA 2 CURSANT: Fâciu N. M

PROGRAMARE OBIECT-ORIENTATA LABORATOR 1 INTRODUCERE IN CLASE SI OBIECTE Introducere teoretica Prin intermediul unei Clase ne dorim sa construim tipuri

C++ Probleme

Interfețe și Protocoale de Comunicații Arduino-Port Paralel Arduino. Laborator 1- Portul Paralel 1 Caracteristici generale Arduino UNO este o placă de

Laborator 1-Teoria probabilitatilor si statistica matematica Sef lucrari dr.mat. Daniel N.Pop Departamentul de calculatoare si inginerie electrica 1 P

Metode API - integrare FGO v.2.8 Cuprins ISTORIC VERSIUNI... 2 INTRODUCERE... 2 APELARE... 4 NOMENCLATOARE... 4 FACTURA... 4 EMITERE... 4 PRINT... 6 S

Paradigme de programare

Prelegerea 4 În această prelegere vom învăţa despre: Algebre booleene; Funcţii booleene; Mintermi şi cuburi n - dimensionale. 4.1 Definirea algebrelor

Metode API - integrare FGO v.2.5 Cuprins ISTORIC VERSIUNI... 2 INTRODUCERE... 2 APELARE... 4 NOMENCLATOARE... 4 FACTURA... 5 EMITERE... 5 PRINT... 6 S

Algoritmi genetici paraleli. Implementari Java. Continut laborator: 1. Obiectivul lucrarii. 2. Notiuni teoretice: 3. Cerinte laborator. 4. Tema. 1. Ob

Curs 10

1. Operatii cu matrici 1 Cerinte: Sa se realizeze functii pentru operatii cu matrici patratice (de dimensiune maxima 10x10). Operatiile cerute sunt: A

-

PPSD

PHP (II)

Tablouri (continuare)

Programarea şi utilizarea calculatoarelor

Diapositive 1

Microsoft Word - Curs_09.doc

Microsoft Word - Curs 7 - JavaScript.doc

Microsoft PowerPoint - Curs_SDA_10_RO_2019_v1.pptx

Microsoft Visual C++ (abreviat MSVC) is a commercial integrated development environment (IDE) product engineered by Microsoft for the C, C++, and C++/

Procesarea Imaginilor - Laborator 1: Introducere în utilizarea bibliotecii OpenCV 1 1. Introducere în utilizarea bibliotecii OpenCV 1.1. Introducere S

tehnologii web

Metode API - integrare FGO v.3.0 Cuprins ISTORIC VERSIUNI... 2 INTRODUCERE... 2 APELARE... 4 NOMENCLATOARE... 4 FACTURA... 4 EMITERE... 4 PRINT... 6 S

Slide 1

Laborator 10 - Paradigme de Programare Corutine - suport nativ pentru paralelism în Kotlin Înainte de a trece la realizarea unei aplicații utilizând c

MergedFile

Notiuni de algebra booleana

Limbaje de programare. Laborator Clasa, obiect, abstractizare Clasa : descrie tipul obiectelor dintr-un program; poate fi asociată cu un şablon

09. Informatica 2 - MM 1

Microsoft Word - O problema cu bits.doc

Microsoft PowerPoint - ARI_R_c9-10_IP_part2 [Compatibility Mode]

GHERCĂ MAGDA CASA CORPULUI DIDACTIC BRĂILA PORTOFOLIU EVALUARE INFORMATICĂ ȘI TIC PENTRU GIMNAZIU CLASA A V-A Neamț SERIA 1 GRUPA 1 CURSANT: GHERCĂ G

Tablouri unidimensionale Problema 1 Să se determine mulţimea cifrelor unui număr natural n > 0, dat. Exemplu: n= Cifre = {1,2,3,7} Se cere să s

-

Școala: Clasa a V-a Nr. ore pe săptămână: 4 Profesor: MATEMATICĂ Clasa a V-a Aviz director PLANIFICARE CALENDARISTICĂ ORIENTATIVĂ Nr. crt. Unitatea de

Laborator Fragments Un fragment reprezintă o porțiune dintr-un Activity. Într-un activity se pot combina mai multe fragmente ți un fragment se poate r

Propunator: Morar Florin Colegiul National Silvania Zalau Discipina: Informatica Nivel liceal, cls. XII 1.Să se scrie în limbajul C/C++ definiţia comp

1

Lecții de pregă,re la informa,că Admitere 2019 Tema: Discutarea problemelor date la ul,mele sesiuni de admitere Bogdan Alexe

Slide 1

Microsoft Word - 2 Filtre neliniare.doc

Analiză de flux de date 29 octombrie 2012

Procesarea de imagini folosind programarea paralela. Implementari Java. Continut laborator: 1. Obiectivul lucrarii. 2. Notiuni teoretice: 3. Cerinte l

E_d_Informatica_sp_SN_2014_bar_10_LRO

Operatorii in C Expresii Operatori aritmetici Operatori de asignare Operatori de incrementare si decrementare Operatori relationali Operatori logici O

Gheorghe IUREA Adrian ZANOSCHI algebră geometrie clasa a VII-a ediţia a V-a, revizuită mate 2000 standard EDITURA PARALELA 45 Matematică. Clasa a VII-

Microsoft Word - CarteC.doc

Slide 1

Analiză statică Analiza fluxului de date 23 octombrie 2014

LUCRAREA 8 PROGRAMAREA NELINIARĂ ÎN REZOLVAREA PROBLEMELOR DIN ENERGETICĂ. METODE DE ORDINUL Aspecte generale Programarea neliniară are o foart

Capitole Speciale de Informatică Curs 4: Calculul scorurilor în un sistem complet de extragere a informaţiilor 18 octombrie 2018 Reamintim că în cursu

Project Work-Based Learning in the Field of Mechatronics: Introducing VET Multipliers to Alternate Work-Based Learning in Romania and Macedonia PROIEC

proiectarea bazelor de date

Microsoft Word - a5+s1-5.doc

O NOUA PROBLEMA DE CONCURS OLIMPIADA MUNICIPALA DE INFORMATICA, IASI 2019 V-am promis într-un articol mai vechi ca vom prezenta pe acest blog câteva p

Transcriere:

Laborator 4: Continuare Programare Orientată pe Obiecte Întocmit de: Adina Neculai Îndrumător: Asist. Drd. Gabriel Danciu 29 octombrie 2011

I. NOŢIUNI TEORETICE A. Suprascrierea metodelor O clasă derivată poate declara o metodă cu aceeaşi semnătură cu a unei metode din clasa de bază. Metoda din clasa derivată substituie astfel metoda din clasa de bază. Această tehnică se numeşte suprascriere. Cu alte cuvinte, la apelul metodei suprascrise din clasa derivată se va executa metoda declarată în clasa derivată. Dacă se doreşte apelul metodei ce aparţine clasei de bază, atunci în metoda din clasa descendentă se foloseşte cuvântul cheie super urmat de operatorul. şi numele metodei suprascrise. Sunt cazuri în care suprascrierea unei metode nu este dorită. Acest lucru se poate realiza prin adăugarea cuvântului cheie final. Astfel că, o metodă declarată final în superclasă nu poate fi suprascrisă în subclasă. Diferenţa între o metodă suprascrisă şi una supraîncărcată este că în cazul celei suprascrise semnătura este identică(atât numărul parametrilor cât şi tipul acestora). B. Clasa Object În Java, toate clasele formează o anumită structură arborescentă, care are ca rădăcină clasa Object. Implicit, aceasta este superclasa tuturor claselor şi nu are o clasă părinte. Metodele principale ale clasei Object sunt: clone Semnătura aceste metode este: protected Object clone() şi returnează o clonă a obiectului căruia i se aplică, deci un obiect cu aceeaşi stare şi acelaşi comportament. Cu toate acestea, obiectul rezultat nu este tocmai identic deoarece adresa de memorie către care face referinţă este diferită de cea a obiectului original. După ce se execută instrucţiunea b=a.clone(), în care a şi b sunt referinţe la obiecte, expresia a==b va avea valoarea false, deoarece valorile variabilelor referinţă a si b sunt diferite, în timp ce expresia a.equals(b) va întoarce valoarea true, deoarece cele două obiecte comparate au conţinuturi identice. 2

equals Semnătura metodei este public boolean equals(object obj) şi returnează valoarea true dacă şi numai dacă obiectele comparate sunt într-adevăr identice; adică obiectele au acelaşi conţinut şi aceeaşi adresă de memorie. hashcode Semnătura metodei este public int hashcode() şi returnează un întreg care este folosit de Java pentru a diferenţia două obiecte. Se recomandă ca atunci când se doreşte suprascrierea metodei equals(), să se suprascrie şi metoda hashcode(). Este important ca două obiecte egale conform metodei equals() să aibă aceleaşi hashcode-uri. tostring Semnătura metodei este public String tostring() şi returnează un şir de caractere de forma java.lang.object@hashcode în care hashcode este exprimat în hexazecimal. Acest şir de caractere reprezintă obiectul căruia i se aplică. De aceea, se recomandă suprascrierea metodei tostring() în toate subclasele clasei Object pentru ca mesajul să poată fi înţeles cu mai multă uşurinţă. Pentru mai multe informaţii se recomandă citirea API-ului. C. Clase şi metode abstracte Forma generală a unei clase abstracte este: [modificator_acces] abstract class NumeClasa{ } O clasă abstractă este utilizată pentru modelarea unor concepte abstracte şi poate reprezenta doar clasa de bază în procesul de moştenire. Un lucru important de reţinut atunci când se lucrează cu clase abstracte este acela că o clasă abstractă nu poate fi instanţiată. Alte caracterisitici ale unor clase de acest fel sunt următoarele: pot implementa constructori; pot avea atribute ce suportă modificări; 3

pot avea metode abstracte. O metodă abstractă este o metodă ce nu are corp (instrucţiuni) şi care într-o clasă descendentă a clasei abstracte trebuie implementată. Dacă metoda declarată abstractă în clasa de bază nu este implementată în subclasă, atunci trebuie declarată din nou abstractă. Astfel şi subclasa devine una abstractă. pot avea şi metode clasice (corpul acestora este implementat în clasa abstractă); deşi clasele abstracte nu pot fi instanţiate, se pot declara obiecte de tipul claselor abstracte şi să fie instanţiate de clasele derivate. D. Interfeţe Forma generală a unei interfeţe este: [modificator_acces] interface NumeInterfata [extends lista_interfete] { } O interfaţă este un fel de clasă abstractă cu diferenţa că într-o interfaţă nici o metodă declarată nu are voie să aibă corp. Interfeţele sunt utilizate pentru a separa implementarea de definiţia metodelor. Spre deosebire de o clasă abstractă, o interfaţă nu poate defini un constructor, iar atributele existente sunt implicit declarate ca fiind statice şi finale, acestea devenind constante. Iar spre deosebire de o clasă obişnuită, o interfaţă poate moşteni mai multe interfeţe (intervine ideea de moştenire multiplă). Forma generală a unei clase care moşteneşte o interfaţă sau o listă de interfeţe este: [modificator_acces] class NumeClasa [extends NumeSuperclasa] implements lista_interfete{ } De aici se poate trage concluzia că o clasă poate implementa una sau mai multe interfeţe. De asemenea, se păstrează regula de la clasele abstracte cum că o clasă care moşteneşte o interfaţă trebuie să îi implementeze toate metodele. Dacă acest lucru un se întâmplă, atunci în clasă metodele devin abstracte. 4

II. PREZENTAREA LUCRĂRII DE LABORATOR A. Suprascrierea metodelor Se dă clasa Superclasa care conţine o singură metodă. Clasa Subclasa moşteneşte Superclasa şi suprascrie metoda afiseazadescriere. Observaţi semnăturile metodelor; sunt identice. 1 public c l a s s S u p e r c l a s a { 2 public void a f i s e a z a D e s c r i e r e ( ) { 3 System. out. p r i n t l n ( " a p e l a r e a f i s e a z a D e s c r i e r e din s u p e r c l a s a... " ) ; 4 } 5 } 1 public c l a s s Subclasa extends Superclasa { 2 public void a f i s e a z a D e s c r i e r e ( ) { 3 // a p e l a r e e x p l i c i t a a metodei din c l a s a de baza 4 // s u p e r. a f i s e a z a D e s c r i e r e ( ) ; 5 System. out. p r i n t l n ( " a p e l a r e a f i s e a z a D e s c r i e r e din s u b c l a s a... " ) ; 6 } 7 } În clasa descendentă, în metoda suprascrisă se poate apela metoda originală (din clasa de bază) folosind cuvântul cheie super. Decomentaţi linia de cod numărul 4 din Subclasa şi observaţi ce se afişează la următoarea rulare. 1 public c l a s s T e s t S u p r a s c r i e r e { 2 public s t a t i c void main ( String [ ] args ) { 3 Superclasa superclasa = new Superclasa ( ) ; 4 Subclasa subclasa = new Subclasa ( ) ; 5 s u p e r C l a s a. a f i s e a z a D e s c r i e r e ( ) ; System. out. p r i n t l n ( ) ; 6 subclasa. a f i s e a z a D e s c r i e r e ( ) ; System. out. p r i n t l n ( ) ; 7 superclasa = subclasa ; 8 s u p e r C l a s a. a f i s e a z a D e s c r i e r e ( ) ; 9 } 10 } B. Clasa Object Clasa Point are două atribute de tipul double şi suprascrie metodele clone, equals, hashcode şi tostring ale clasei Object. Observaţi în linia de cod 1 cuvintele implements Cloneable. Orice clasă care extinde clasa Object şi care îi suprascrie metodele trebuie să implementeze interfaţa Cloneable. Despre interfeţe se discută pe larg în secţiunile I D şi II D. Pentru a respecta proprietăţile metodei hascode, de a returna un număr întreg care să diferenţieze două obiecte diferite, se implementează un algoritm care produce un astfel de număr. În 5

exemplul prezentat (linia de cod 30), algoritmul constă în înmulţirea cu un număr prim şi însumarea membrilor obiectului. Cu cât algoritmul matematic este mai complex cu atât regulile hashcode sunt respectate în mai multe cazuri. 1 public c l a s s Point implements Cloneable { 2 private double x, y ; 3 4 public void setx ( double x ) { 5 t h i s. x = x ; 6 } 7 8 public void sety ( double y ) { 9 t h i s. y = y ; 10 } 11 12 protected Point clone ( ) { 13 Point pobj = new Point ( ) ; 14 pobj. x = t h i s. x ; 15 pobj. y = t h i s. y ; 16 return pobj ; // o b i e c t u l pobj a r e membrii i d e n t i c i cu c e i a i o b i e c t u l u i c u r e n t 17 } 18 19 public boolean e q u a l s ( Object o b j ) { 20 i f ( o b j == t h i s ) 21 return true ; // r e f e r i n t e e g a l e 22 i f (! ( o b j instanceof Point ) ) 23 return f a l s e ; // o b j nu e s t e de t i p u l Point 24 Point p = ( Point ) o b j ; // s e f a c e un downcasting, a d i c a o b j e s t e c o n v e r t i t l a t i p u l Point 25 i f ( t h i s. x!= p. x t h i s. y!= p. y ) 26 return f a l s e ; // c o o r d o n a t a x sau y e s t e d i f e r i t a 27 return true ; 28 } 29 30 public int hashcode ( ) { 31 double r e s u l t = 1 7 ; 32 r e s u l t = 37 r e s u l t + t h i s. x ; 33 r e s u l t = 37 r e s u l t + t h i s. y ; 34 return ( int ) r e s u l t ; / s e f a c e un c a s t l a t i p u l i n t, i n t r u c a t v a r i a b i l a r e s u l t e s t e una 35 de t i p double, i a r f u n t i a hashcode r e t u r n e a z a o v a l o a r e de t i p i n t / 36 } 37 38 public String t ostr ing ( ) { 39 return " x= "+x+" ; y= "+y ; 40 } 41 } Clasa TestObject creează un obiect de tipul Point, îi setează proprietăţile şi îi apelează metodele. 1 public c l a s s TestObject { 2 public s t a t i c void main ( String [ ] args ) { 3 Point p1 = new Point ( ) ; 4 p1. setx ( 3 ) ; 5 p1. sety ( 4 ) ; 6 Point p1clone = p1. clone ( ) ; 7 System. out. p r i n t l n ( " P1 : "+p1. t o S t r i n g ( ) ) ; 8 System. out. p r i n t l n ( " Clona l u i P1 : "+p1clone. t o S t r i n g ( ) ) ; 9 i f ( p1. e q u a l s ( p1clone ) ) 6

10 System. out. p r i n t l n ( " O b i e c t e l e sunt i d e n t i c e! " ) ; 11 e l s e System. out. p r i n t l n ( " O b i e c t e l e nu sunt i d e n t i c e! " ) ; 12 System. out. p r i n t l n ( " Hashcode u l l u i P1 e s t e : "+p1. hashcode ( ) ) ; 13 System. out. p r i n t l n ( " Hashcode u l c l o n e i l u i P1 e s t e : "+p1clone. hashcode ( ) ) ; 14 } 15 } C. Clase şi metode abstracte Pentru a exemplifica utilizarea claselor şi metodelor abstracte vom folosi clasa Produs. Să presupunem că vrem să derivăm un număr mai mare de clase din Produs: Carte, RamaFoto, etc. Se observă că acestea au în comun preţul, o descriere şi eventual o reducere a preţului în funcţie de anumite proprietăţi ale fiecărui produs în parte. În acest caz, obiecte de genul Carte sau RamaFoto trebuie să facă parte din clase care moştenesc o superclasă comună, Produs. Mai mult, ar trebui ca Produs să implementeze metodele afiseaza- Descriere şi calculeazareducere. Pentru că implementarea metodelor depinde de tipul obiectului şi proprietăţilor acestuia, metodele se declară abstracte în clasa Produs. 1 public abstract c l a s s Produs { 2 private double pretunitar ; 3 4 Produs ( double pretunitar ) { 5 this. pretunitar = pretunitar ; 6 } 7 8 public double getpretunitar ( ) { 9 return pretunitar ; 10 } 11 12 // metodele a b s t r a c t e nu au corp 13 // e l e vor f i implementate i n c l a s e l e c o p i l a l e c l a s e i Produs 14 public abstract void a f i s e a z a D e s c r i e r e ( ) ; 15 public abstract double c a l c u l e a z a R e d u c e r e ( int p r o c e n t ) ; 16 } Clasa Carte extinde clasa Produs şi implementează metodele abstracte ale acesteia în modul ei propriu. La fel se întâmplă şi pentru clasa RamaFoto. 1 public c l a s s Carte extends Produs { 2 private String t i t l u, autor ; 3 4 public Carte ( double pretunitar, String t i t l u, String autor ) { 5 super ( p r e t U n i t a r ) ; 6 t h i s. t i t l u = t i t l u ; 7 this. autor = autor ; 8 } 9 7

10 // metoda a f i s e a z a D e s c r i e r e e s t e implementata i n s u b l c l a s a 11 public void a f i s e a z a D e s c r i e r e ( ) { 12 System. out. p r i n t l n ( " T i t l u c a r t i i e s t e : "+t h i s. t i t l u+", i a r a u t o r u l e s t e : "+t h i s. a u t o r ) ; 13 } 14 15 // metoda c a l c u l e a z a R e d u c e r e e s t e implementata i n s u b l c l a s a 16 public double c a l c u l e a z a R e d u c e r e ( int p r o c e n t ) { 17 System. out. p r i n t l n ( " C a l c u l e a z a r e d u c e r e din Carte... " ) ; 18 return 0. 0 ; 19 } 20 } 1 public c l a s s RamaFoto extends Produs { 2 private int lungime, latime ; 3 4 public RamaFoto ( double pretunitar, int lungime, int l a t i m e ) { 5 super ( p r e t U n i t a r ) ; 6 this. lungime = lungime ; 7 this. latime = latime ; 8 } 9 10 // metoda a f i s e a z a D e s c r i e r e e s t e implementata i n s u b l c l a s a 11 public void a f i s e a z a D e s c r i e r e ( ) { 12 System. out. p r i n t l n ( " Lungimea ramei e s t e : "+t h i s. lungime+", i a r l a t i m e a e s t e : "+t h i s. l a t i m e ) ; 13 } 14 15 // metoda c a l c u l e a z a R e d u c e r e e s t e implementata i n s u b l c l a s a 16 public double c a l c u l e a z a R e d u c e r e ( int p r o c e n t ) { 17 System. out. p r i n t l n ( " C a l c u l e a z a r e d u c e r e i n RamaFoto i n f u n c t i e de l a t i m e s i lungime... " ) ; 18 return 0. 0 ; 19 } 20 } Clasa TestProdus creează un vector de obiecte de tipul Produs şi calculează preţul total al tuturor produselor declarate. Cum un obiect dintr-o clasă abstractă nu poate fi instanţiat cu tipul clasei abstracte, se instanţiază cu tipul subclaselor, în acest caz Carte şi RamaFoto. 1 public c l a s s TestProdus { 2 public s t a t i c void main ( String [ ] args ) { 3 Produs [ ] l i s t a P r o d u s e = new Produs [ 4 ] ; 4 f o r ( int i =0; i <l i s t a P r o d u s e. l e n g t h ; i ++){ 5 i f ( i % 2 == 0) { // daca i e s t e par a t u n c i s e c r e e a z a un o b i e c t de t i p u l Carte 6 l i s t a P r o d u s e [ i ] = new Carte ( 1 2. 3, " Fundatia "+i, " I s a a c Asimov " ) ; 7 } e l s e { // daca i e s t e impar a t u n c i s e c r e e a z a un o b i e c t de t i p u l RamaFoto 8 l i s t a P r o d u s e [ i ] = new RamaFoto ( 5. 5, 20 i, 15 i ) ; 9 } 10 } 11 double prettotal = 0. 0 ; 12 f o r ( int i =0; i <l i s t a P r o d u s e. l e n g t h ; i ++){ 13 //putem avea acces la metoda getpretunitar ( ) pentru ca aceasta se a f l a in c l a s a parinte. 14 double p r e t P r o d u s O r i g i n a l = l i s t a P r o d u s e [ i ]. g e t P r e t U n i t a r ( ) ; 15 double r e d u c e r e = l i s t a P r o d u s e [ i ]. c a l c u l e a z a R e d u c e r e ( i ) ; 16 prettotal += pretprodusoriginal reducere ; 17 l i s t a P r o d u s e [ i ]. a f i s e a z a D e s c r i e r e ( ) ; 18 } 19 System. out. p r i n t l n ( " P r e t u l t o t a l a l p r o d u s e l o r e s t e : "+p r e t T o t a l ) ; 8

20 } 21 } D. Interfeţe Avem interfaţa IPersoana în care se află definiţia unei metode. 1 public i n t e r f a c e I P e r s o a n a { 2 public S t r i n g returneazanumepersoana ( ) ; 3 } Interfaţa IStudent moşteneşte interfaţa IPersoana, implicit şi metoda unică a acesteia. 1 public i n t e r f a c e IStudent extends IPersoana { 2 public boolean v e r i f i c a S t u d e n t I n t e g r a l i s t ( ) ; 3 } Clasa Student implementează interfaţa IStudent, deci implementează atât metodele acesteia, cât şi pe cele ale interfeţei pe care IStudent o moşteneşte. 1 public c l a s s Student implements IStudent { 2 String nume ; 3 double medienote ; 4 5 public Student ( String nume, double medienote ) { 6 this. nume = nume ; 7 this. medienote = medienote ; 8 } 9 10 // s e implementeaza metoda din I S t u d e n t 11 public boolean v e r i f i c a S t u d e n t I n t e g r a l i s t ( ) { 12 i f ( t h i s. medienote >= 5) { 13 return true ; 14 } 15 return false ; 16 } 17 18 // s e implementeaza metoda m o s t e n i t a de I S t u d e n t din I P e r s o a n a 19 public S t r i n g returneazanumepersoana ( ) { 20 return this. nume ; 21 } 22 } Clasa TestStudent creează un obiect de tipul Student şi verifică dacă studentul este integralist sau nu, afişând un mesaj corespunzător. 1 public c l a s s TestStudent { 2 public s t a t i c void main ( String [ ] args ) { 3 Student student = new Student ( " Ionescu Radu ", 6. 3 ) ; 4 i f ( s t u d e n t. v e r i f i c a S t u d e n t I n t e g r a l i s t ( ) ) 5 System. out. p r i n t l n ( s t u d e n t. returneazanumepersoana ( )+" e s t e i n t e g r a l i s t " ) ; 6 e l s e 9

7 System. out. p r i n t l n ( s t u d e n t. returneazanumepersoana ( )+" nu e s t e i n t e g r a l i s t " ) ; 8 } 9 } III. TEMĂ 1. Folosind conceptul de clase şi metode abstracte creaţi o aplicaţie care calculează pentru un cub şi pentru o sfera: aria totala; volumul; centrul de greutate. Pentru acestea veţi avea nevoie de: cub (reprezentat de 8 puncte); sferă (reprezentată de 2 puncte: centrul şi un punct de pe margine); punct (reprezentat de cele 3 coordonate în spatiu: x, y şi z); metoda care calculează distanţa dintre 2 puncte aflate în spaţiu. Aceasta este necesară pentru aflarea lungimii unei laturi. 10