Ingineria Sistemelor de Programare

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

PROGRAMARE ORIENTATA PE OBIECTE

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

Microsoft Word - lab4.doc

Laborator 3

Microsoft Word _POO_Lab_1_Modificari_v01.htm

Ingineria Sistemelor de Programare

Paradigme de Programare

Proiectarea Sistemelor Software Complexe

Top

Declararea variabilelor

Ingineria Sistemelor de Programare

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

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

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

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

Paradigme de programare

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

Object Oriented Programming

Programarea şi utilizarea calculatoarelor

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

Analiză statică Analiza fluxului de date 23 octombrie 2014

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

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

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

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

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

PowerPoint Presentation

Analiză de flux de date 29 octombrie 2012

Curs 6 Gestiunea memoriei in C++ Alocare dinamica. Destructor. RAII. Rule of three. Tratarea excepțiilor exception safe code Moștenire Curs 5 Template

PowerPoint Presentation

tehnologii web

Programarea şi utilizarea calculatoarelor

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

Slide 1

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

CURS

proiectarea bazelor de date

Microsoft PowerPoint - Curs_TPI_22_v01.ppt

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

Slide 1

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

PPSD

Programarea şi utilizarea calculatoarelor

Microsoft Word - CarteC.doc

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

Slide 1

Laborator 8: PROIECTAREA BAZELOR DE DATE SUBPROGRAME in PL/SQL (partea II - functii) Un subprogram este un bloc PL/SQL cu nume (spre deosebire de bloc

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

Laborator 7: PROIECTAREA BAZELOR DE DATE SUBPROGRAME in PL/SQL (partea I - proceduri) Un subprogram este un bloc PL/SQL cu nume (spre deosebire de blo

C++ Probleme

-

Platformăde e-learning și curriculăe-content pentru învățământul superior tehnic Sisteme de operare 13. Planificarea proceselor

Testare manuala: situatia in care o persoana initiaza fiecare test, interactioneaza cu el si interpreteaza, analizeaza si raporteaza rezultatele. Test

Proceduri stocate Syntax: CREATE PROCEDURE <Name> type1,...] AS -- secventa de comenzi SQL GO O procedura stocata se ruleaza cu EXEC: EXEC <N

Tablouri (continuare)

FIŞA DISCIPLINEI 1. Date despre program 1.1 Instituţia de învăţământ Universitatea Babeş-Bolyai Cluj-Napoca superior 1.2 Facultatea Facultatea de Mate

Paradigme de Programare

Introducere în limbajul JavaScript

Limbaje de programare Pointeri. Alocare dinamică (continuare) 26 noiembrie 2012

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

Slide 1

Textul si imaginile din acest document sunt licentiate Attribution-NonCommercial-NoDerivs CC BY-NC-ND Codul sursa din acest document este licentiat Pu

Laborator 6 - Paradigme de Programare

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

-

SUBPROGRAME

Microsoft Word - Curs_08.doc

Microsoft Word - O problema cu bits.doc

Curs 10

L7

JScm: Compilator Scheme pentru masina virtuala Java Constantin Stanciu Zoran Constantinescu Universitatea "Poli

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

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. 9 - Liste dublu înlănţuite Breviar teoretic În cadrul elementelor studiate anterior s-a putut observa utilitatea listelor simplu înlănuit

ALGORITHMICS

Microsoft Word - CarteC.doc

Microsoft Word - Tematica examen AII.doc

Slide 1

RZOLVARE EXERCITIU ZODII declare cursor distributie_zodie is select nume_zodie, count(*) distributie from zodiac z join utilizatori u on to_date(to_ch

MINISTERUL EDUCAŢIEI, CULTURII ŞI CERCETĂRII AL REPUBLICII MOLDOVA UNIVERSITATEA DE STAT ALECU RUSSO DIN BĂLŢI FACULTATEA DE ŞTIINŢE REALE, ECONOMICE

Microsoft Word - 2 ES RO.doc

Tipuri de date abstracte 30 noiembrie 2005 Programarea calculatoarelor 2. Curs 9 Marius Minea

PHP (II)

1

Facultatea de Electronica Telecomunicatii si Tehnologia Informatiei Arhitectura.Net Indrumator : Conf. dr. ing. Stefan Stancescu Masterand: ing. Codru

Microsoft Word - PCLP2_Curs_4_2019.doc

Microsoft Word - Curs_10.doc

Limbaje de Programare Curs 5 – Siruri de caractere

Microsoft Word - Casa ecologica_Final pt pdf.doc

Microsoft Word - Curs_09.doc

Prezentarea calculatorului

1

Microsoft PowerPoint - Curs_SDA_10_RO_2019_v1.pptx

Microsoft Word - CarteC.doc

Declaraţii. Instrucţiuni 19 octombrie 2005 Programarea calculatoarelor 2. Curs 3b Marius Minea

Microsoft Word - Examen CTI.docx

Curs 8: Tehnica divizării (I) Algoritmi si structuri de date - Curs 8 1

Transcriere:

Ingineria Sistemelor de Programare Agregarea si Mostenirea mihai.hulea@aut.utcluj.ro 2019

Compozitia si agregarea Relatia dintre obiecte raspunde afirmativ la intrebarea are un/are o Exemple: Telefonul are o baterie? DA Masina are un motor? DA Studentul are o persoana? NU \ Studentul este un tip de persoana? DA - > se foloseste mostenirea Diferenta dintre agregare si compozitie este la nivel conceptual si nu la nivel sintactic

Compozitia Obiectele componente isi incheie ciclul de viata impreuna cu obiectele care il compun.

Compozitia class TV { Display d; PowerSource pw; class Display { int size; class PowerSource { int watt;

Compozitia In mod usual in procesul de compozitie clasa compusa are rolul de a instantia obiectele componente

Compozitia class TV { Display d; PowerSource pw; TV TV(){ d = new Display(); pw = new PowerSource(); Display PowerSource class Display { int size; class PowerSource { int watt;

Agregarea Obiectele component pot exista si dupa ce obiectul din care fac parte isi incheie ciclul de viata

Agregarea class Adresa { String strada; class Persoana{ String nume; Adresa adresa;

class Adresa {String strada; Agregarea Adresa(String str){ strada = str; class Persoana{ Persoana String nume; Adresa adresa; Persoana(String n, Adresa a){ nume = n; Adresa adresa = a; public class Test{ public static void main(string[] args){ Adresa a = new Adresa("V. Alecsandri"); Persoana p = new Persoana("Alex",a);

Ce este mostenirea Mecanismul de construire a unei clase plecand de la o clasa existanta prin adaugare de attribute si comportamente noi sau prim modificarea comportamentului existent.

Avantajele mostenirii Reutilizare codului Comportamentul definit in clasa de baza este automat mostenit in clasa derivata Properietatile definite in clasa de baza sunt mostenite in clasa derivata O subclasa trebuie sa implementeze doar diferentele fata de clasa de baza

Cum se implementeaza Se utilizeaza cuvantul cheie extends public class Persoana { String nume; int varsta; Clasa de baza Persoana(){ System.out.println("Constructor persoana."); class Student extends Persoana { Clasa derivata Student(){ System.out.println("Constructor student.");

Cand se utilizeaza Cand relatia dintre cele doua clase raspunde afirmativ la intrebarea Este un tip de? Studentul este un tip (un caz particular) de persoana? DA => putem utiliza mostenirea Adresa este un tip de persoana? NU => nu putem utiliza mostenirea

Ce putem face intr-o clasa derivata Subclasa mosteneste toti membri de tip public si protected Daca subclasa este in acelasi pachet mosteneste si membri cu acces package

Ce putem face intr-o clasa derivata Membrii mosteniti pot fi accesati si folositi in mod direct Putem declara atribute cu acelasi nume => nu este recomandat pt ca se ascund membrii din clasa de baza Putem declara o metoda in clasa derivata cu acelasi nume si attribute cu cea din clasa de baza => suprascriere (eng. Overwrite) Putem declara noi atirbute si metode

Clasa Object Clasa de baza a tuturor claselor in Java Toate clasele mostenesc clasa Object Definieste comportamentul comun tuturor claselor: getclass() equals() tostring()

Clasa Object Ierarhia completa pentru exemplul anterior: Object Person Student

Apelarea Constructorului public class Persoana { String nume; int varsta; 2 3 Persoana(){ System.out.println("Constructor persoana."); class Student extends Persoana { 1 4 Student(){ System.out.println("Constructor student."); Student s = new Student();

Cuvantul cheie super O subclasa poate apela explicit constructorul de baza utilizand super() Se va executa constructorul care corspunde ca numar si tip de argumente Instructiunea super() trebuie sa fie prima in constructor

Cuvantul cheie super public class Persoana { String nume; int varsta; Persoana(){ System.out.println("Constructor persoana."); Persoana(String nume, int varsta){ this.nume = nume; this.varsta = varsta; class Student extends Persoana { Student(){ super("alin",1); System.out.println("Constructor student.");

Cuvantul cheie super O alta utilizare a lui super este pentru referirea unui atribut sau a unei metode din clasa de baza (in mod similar cu this ) super.metoda(arg1,arg2);

Suprascrierea metodelor O clasa derivata poate modifica comportamentul unei metode dintr-o clasa de baza, suprascriind (eng. overwrite) acea metoda. Atentie! In cazul metodelor statice aceasta operatie se numeste ascundere (eng. Hiding method). Metoda derivata trebuie sa aiba acelasi tip de return, numar si tip de parametri.

Suprascrierea metodelor Specificatorii de acces in metodele suprascrise pot extinde accesul dar nu il pot restriction de exemplu o metoda protected poate fi facuta publica dar nu privata.

Polimorfismul Tipuri de polimorfism Polimorfism dinamic (eng. dynamic / runtime polymorphism) Polimorfism static (eng. static / compile polymorphism) Comportamentul prin care se descoperain in mod dinamic în timpul rulării tipul concret al unui obiect din cadrul unei ierarhii de tipuri se numeşte polimorfism dinamic => suprascrierea metodelor (eng. Overwriting). Polimorfismul dianamic permite tratarea tuturor obiectelor dintr-o ierarhie de clase prin intermediul tipului lor de baza. Identificarea in momentul compilarii a metodei ce trebuie apelate se numeste polimorfism static => supraincarcarea metodelor (eng. Overloading)

Polimorfismul... Persoana p1 = new Student("Dan", 21, "UCTN"); Persoana p2 = new ErasmusStudent("Dan", 21, "UCTN","UBB"); p1.showpersondetails(); // call Student showpersondetails p2.showpersondetails(); // call ErasmusStudent showpersondetails

Polimorfismul Pentru metodele statice polimorfismul de tip runtime nu se aplica => daca tratam un obiect ca si tipul de baza, apelarea unei metode statice va duce la apelul metodei din clasa tipului de baza si nu la apelul metodei din cadrul tipului concret din care face parte obiectul

Conversii de tip Cand un obiect este construit, spunem despre acesta ca este de tipul clasei din care a fost creat. In acelas timp acel obiect este de tipul tuturo claselor mostenite Exemplu: Student s1 = new Student() s1 este de tip Student s1 este de tip Persoana s1 este de tip Object

Conversii de tip Un obiect poate fi manipulate (utilizat) prin intermediul tipului sau concret sau prin intermediul tipului de baza Manipularea unui obiect prin tipul de baza se numeste conversie de tip implicita Student s = new Student( ); Person p = s; // conversie de tip implicita Object o = s; // conversie de tip implicita

Conversii de tip Un obiect definit ca si tip de baza poate fi tratat prin tipul derivate prin intermediul conversiei de tip explicitie Person p1 = new Student( ); Student s1 = (Student)p1;

Conversii de tip Conversia de tip explicita poate genera erori la runtime Person p1 = Student(); ErasmusStudent e1 = (ErasmusStudent) p1; Exception in thread "main" java.lang.classcastexception: v3.student cannot be cast to v3.erasmusstudent at v3.test.main(test.java:14)

Conversii de tip Pentru a valida la runtime tipul concret al unui obiecte se poate utiliza instructiunea instanceof if (p1 instanceof ErasmusStudent) { ErasmusStudent ss = (ErasmusStudent) p1; ss.showpersondetails();

Utilizati instanceof cu atentie Effective C++, by Scott Meyers: "Anytime you find yourself writing code of the form "if the object is of type T1, then do something, but if it's of type T2, then do something else," slap yourself.

Exemplu polimorfism class Bird { public void move(){ System.out.println("The bird is moving."); class Penguin extends Bird{ public void move(){ System.out.println("The PENGUIN is swiming."); class Goose extends Bird{ public void move(){ System.out.println("The GOOSE is flying.");

Exemplu polimorfism public class BirdController{ Bird[] birds = new Bird[3]; BirdController(){ birds[0] = createbird(); birds[1] = createbird(); birds[2] = createbird(); public void relocatebirds(){ for(int i=0;i<birds.length;i++) birds[i].move(); private Bird createbird(){ int i = (int)(math.random()*10); if(i<5) return new Penguin(); else return new Goose(); public static void main(string [] args){ BirdController bc = new BirdController(); bc.relocatebirds();

Clase finale O clasa finala nu poate fi extinsa Declararea unei clase finale public final class Persoana{ Exemplu: clasa String nu poate fi extinsa

Metode finale O metoda finala nu poate fi suprascrisa Declararea unei metode finale: public final void afiseaza(){ Metodele statice sunt automat finale!

Atribute finale Nu pot fi modificate Pot fi initializate o singura data public class MyClass { private final int myfield = 3; public MyClass() {... public class MyClass { private final int myfield; public MyClass() {... myfield = 3;...

Variabile de metoda finale Variabilele nu vor putea fi modificate in iteriorul metodei public void foo(final Class1 c1, final Class c2){

Beneficiile cuvantului cheie final Ajuta la imbunatairea performantei JVM poate stoca in cache variabilele finale utilizate frecvent Variabilele finale pot fi utilizate in aplicatii multi-thread fara a implementa mecanisme de sincronizare Cuvantul final permite JVM sa optimizeze metodele, variabilele si clasele