Ingineria Sistemelor de Programare

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

Ingineria Sistemelor de Programare

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

Laborator 3

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

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

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

Ingineria Sistemelor de Programare

Declararea variabilelor

proiectarea bazelor de date

Programarea şi utilizarea calculatoarelor

Lucrarea nr. 9 - Liste dublu înlănţuite Breviar teoretic În cadrul elementelor studiate anterior s-a putut observa utilitatea listelor simplu înlănuit

Curs 10

Proiectarea Sistemelor Software Complexe

Paradigme de Programare

Microsoft Word _POO_Lab_1_Modificari_v01.htm

Metode de sortare - pregătire admitere - Conf.dr. Alexandru Popa Lect. dr. Andrei Pătraşcu Universitatea din Bucureşti 1

PHP (II)

Top

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

Microsoft Word - lab4.doc

Diapositive 1

PROGRAMARE ORIENTATA PE OBIECTE

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

PowerPoint Presentation

Laborator5_SQL_an2

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

CURS

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

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

Object Oriented Programming

Analiză statică Analiza fluxului de date 23 octombrie 2014

Slide 1

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

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

Microsoft PowerPoint - Curs_TPI_22_v01.ppt

Paradigme de Programare

III. Tablouri (Arrays) și Clustere

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

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

IBR 8 iulie 2019

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

C++ Probleme

Microsoft Word - Curs 11 - PHP.doc

I. Navigating LabVIEW

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

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

Tablouri (continuare)

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

SUBPROGRAME

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

-

Algoritmi elementari Metode de căutare secvenţială binară Metode de ordonare metoda bulelor metoda inserţiei metoda selecţiei metoda numărării Intercl

Paradigme de programare

Analiză de flux de date 29 octombrie 2012

IR Update February 2014

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

Baze de date-Anul 2 (semestrul 2)

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

Capitole Speciale de Informatică Curs 1: Extragerea informaţiilor. Modelul boolean şi modelul boolean extins 27 septembrie 2018 Extragerea informaţiil

TEZA de ABILITARE Corelatii intre biomateriale, proteze valvulare cardiace si tehnici chirurgicale folosite in protezarea valvulara aortica Horatiu Mo

Baze de date

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

Logică și structuri discrete Relații. Funcții parțiale Marius Minea marius/curs/lsd/ 20 octombrie 2014

Inteligență artificială Laboratorul 8 Perceptronul și rețele de perceptroni în Scikit-learn Stanga :multimea de antrenare a punctelor 3d; Dreapta : mu

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

Microsoft PowerPoint - Curs_SDA_9_RO_2019_v2.pptx

Microsoft PowerPoint - SD5-RO.ppt

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

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

Microsoft PowerPoint - Curs_SDA_10_RO_2019_v1.pptx

Logică și structuri discrete Logică propozițională Marius Minea marius/curs/lsd/ 3 noiembrie 2014

PowerPoint Presentation

Facultatea de Matematica si Informatica Universitatea din Bucuresti Structuri liniare Liste. Stive. Cozi - Inserare, cautare, stergere - Lectii de pre

Microsoft Word - Curs 7 - JavaScript.doc

Limbaje de Programare Curs 6 – Functii de intrare-iesire

Aggregating Data

Creational design patterns

PPSD

Programarea şi utilizarea calculatoarelor

tehnologii web

aplicatii java

2

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

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

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

Curs 3 Permutari cu repetitie. Combinari. Algoritmi de ordonare si generare

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

Laborator - Configurarea Rutelor IPv4 Statice și Implicite Topologie Tabela de Adresare Echipame nt Interfață Adresă IP Masca de subreţea Default Gate

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

OPTICS User Manual v1.3.1

Inferenţa statistică

Microsoft Word - Curs_07.doc

Slide 1

Slide 1

PowerPoint Presentation

Transcriere:

Ingineria Sistemelor de Programare Colectii de obiecte mihai.hulea@aut.utcluj.ro

Introducere Stocarea grupurilor de obiecte utilizand array Instrument[] lista = new Instrument[2]; lista[0] = new Instrument("aa"); lista[1] = new Instrument("bb"); for(int i=0;i<lista.length;i++) lista[i].canta(); Dezavantaje? Dimensiune fixa (nu poate fi modificata ulterior) Trebuie cunoscut in avans numarul de obiecte pe care dorim sa le stocam

Colectiile Java Collections Framework set de clase si interfete ce ofera programatorului uneltele necesare pentru manipularea grupurilor de obiecte. Fac parte din pachetul java.util Collections Framework este compus din: Interfete Implementari Algoritmi Avantaje: Reduc efortul de programare Ofera mecanisme de extindere Ofera algoritmi specifici pentru manipularea colectiilor de obiecte

Interfetele Set - colectie de elemente unice List - colectie de elemente ordonate Queue si Deque- colectii de elemente cu metode suplimentare pentru manipulare (inserare, stergere, parcurgere) Map - colectii de tip cheie valoare SortedSet - colectie de tip Set cu elemente sortate SortedMap - colectie de tip Map cu elemente sortate

Interfata Collection Principalele metode: boolean add(e o) boolean contains(object o) boolean remove(object o) boolean isempty() int size() Object[] toarray() Iterator<E> iterator()

Interfata Set interface Set<E> implements Collection, Iterable Lista neordonata de elemente Metode relevante: boolean contains(object o) // membership test boolean containsall(collection<?> c) //subset test boolean addall(collection<? extends E> c) // union boolean retainall(collection<?> c) // intersection boolean removeall(collection<?> c) // difference addall, retainall, removeall returneaza true daca setul a fost modificat sau false in caz contrar Obiectele din Set trebuie sa suprascrie metodele equals si hashcode

Interfata SortedSet Un Set in care elementele sunt stocate sortat interface SortedSet<E> implements Set, Collection, Iterable Metode relevante: E first() E last() Obiectele din SortedSet trebuie sa implementeze interfata Comparable

Interfata List interface List<E> extends Collection, Iterable Lista ordonata de elemente Metode relevante: void add(int index, E element) E remove(int index) boolean remove(object o) E set(int index, E element) E get(int index) int indexof(object o) int lastindexof(object o) ListIterator<E> listiterator()

Interfata Map Interface Map<K,V> O structura de date de tip cheie valoare Metode relevante: V put(k key, V value) // adds a key-value pair to the map V get(object key) // given a key, looks up the associated value Set<K> keyset() Collection<V> values()

Interfata SortedMap Interface SortedMap<K,V> extentds M<K,V> Cheile sunt stocate sortate Metode relevante: K firstkey() K lastkey() Doar obiectele ce implementeaza interfata Comparable pot fi utilizate ca si chei

Implementarea colectiilor

Implementarea colectiilor class HashSet<E> implements Set class TreeSet<E> implements SortedSet class ArrayList<E> implements List class LinkedList<E> implements List class Vector<E> implements List class Stack<E> extends Vector push, pop, peek, isempty class HashMap<K, V> implements Map class TreeMap<K, V> implements SortedMap http://fresh2refresh.com/java-tutorial/java-collections-framework/

Tipuri generice in colectii public class GenericExample{ public static void main(string[] args) { ArrayList l1 = new ArrayList(); l1.add(new BankAccount("123")); l1.add(new BankAccount("342")); l1.add(new Order("Client1","342")); Colectiile stocheaza obiecte eterogene. Prin adaugarea unui obiect in colectie se pierde informatia cu privire la tipul concret al obiectului. class BankAccount{ //... Object o = l1.get(0); BankAccount o1 = (BankAccount)l1.get(0); Order o2 = (Order)l1.get(0); o1.displayaccount(); o2.displayorder(); class Order { //... Exception in thread "main" java.lang.classcastexception: colectii.liste.bankaccount cannot be cast to colectii.liste.order at colectii.liste.genericexample.main(genericexample.java:23) Java Result: 1

Tipuri generice in colectii Eng. Generic Types Mecanism de parametrizare a claselor si metodelor Sintaxa pentru definirea unei clase generice: class name<t1, T2,..., Tn> { /*... */ Sectiunea tipurilor parametrice este delimitata de < si > Utilizarea unei clase generice: Node<Integer> i = new Node<>(); class Node<T>{ private T value; public T getvalue() { return value; https://docs.oracle.com/javase/tutorial/java/generics/types.html public void setvalue(t value) { this.value = value;

Tipuri generice in colectii Utilizarea tipurilor generice asigura validarea la compilare a tipurilor obiectelor Tipuri generice = tipuri cu care colectiilor vor opera ArrayList<BankAccount> l1 = new ArrayList<>(); l1.add(new BankAccount("123")); l1.add(new BankAccount("342")); l1.add(new Order("Client1","342")); Eroare de compilare! BankAccount o1 = l1.get(0); Order o2 = (Order)l1.get(0); o1.displayaccount(); o2.displayorder();

Exemple Exemple List (ArrayList, LinkedList) Exemple Set (HashSet) Exemple Map (HashMap)

Clasa Collections Clasa utilitare ce ofera algoritmi de manipulare a listelor Algoritmi disponibil in clasa Collections: Sort Shuffle Reverse Swap ReplaceAll Fill Copy BinarySearch IndexOfSublist LastIndexOfSubList

Clasa Collections - Exemplu ArrayList<Order> a = new ArrayList<>(); a.add(new Order("c1","1")); a.add(new Order("c2","2")); a.add(new Order("c3","3")); a.add(new Order("c4","4")); System.out.println(a); Collections.shuffle(a); System.out.println(a);

Ordonarea obiectelor

Interfata Comparable Nr negativ daca T < obiectul current 0 daca T = obiectul current Nr pozitiv daca T > obiectul curent ArrayList<Product> list = new ArrayList<>(); list.add(new Product("A", 7)); list.add(new Product("B", 5)); list.add(new Product("C", 4)); Collections.sort(list); for(product p: list) System.out.println(p); public interface Comparable<T> { public int compareto(t o); class Product implements Comparable<Product>{ private String name; private int price;... @Override public int compareto(product o) { return this.price - o.price;

Interfata Comparator Primeste ca argumente ambele obiecte Nr negativ daca T < obiectul current 0 daca T = obiectul current Nr pozitiv daca T > obiectul curent public interface Comparator<T>{ int compare(t o1, T o2); Comparator<Product> NAME_ORDER = new Comparator<Product>(){ public int compare(product e1, Product e2) { return e1.getname().compareto(e2.getname()); ; Collections.sort(list, NAME_ORDER); list.sort(name_order); //incepand cu Java 8

Suprascrierea equals() si hashcode() Cum lucreaza colectiile hash: http://en.wikipedia.org/wiki/hashtable Daca doua obiecte sunt egale atunci acestea trebuie sareturneze aceiasi valoare pentru metodele queals() si hashcode() Daca doua obiecte returneaza acelasi hash code nu este obligatoriu ca ele safie egale hashcode() folosit in HashTable, HashMap si HashSet http://www.jitendrazaa.com/blog/java/what-is-the-need-to-override-hashcode-and-equals-method/

Suprascrierea equals() si hashcode() Extras din documentatia javadocs oficiala. Regulile pentru metoda equals: It is reflexive: for any non-null reference value x, x.equals(x) should return true. It is symmetric: for any non-null reference values x and y, x.equals(y) should return true if and only if y.equals(x) returns true. It is transitive: for any non-null reference values x, y, and z, if x.equals(y) returns true and y.equals(z) returns true, then x.equals(z) should return true. It is consistent: for any non-null reference values x and y, multiple invocations of x.equals(y) consistently return true or consistently return false, provided no information used in equals comparisons on the objects is modified. For any non-null reference value x, x.equals(null) should return false.

Suprascrierea equals() si hashcode() Extras din documentatia javadocs oficiala. Regulile pentru metoda hashcode(): Whenever it is invoked on the same object more than once during an execution of a Java application, the hashcode method must consistently return the same integer, provided no information used in equals comparisons on the object is modified. This integer need not remain consistent from one execution of an application to another execution of the same application. If two objects are equal according to the equals(object) method, then calling the hashcode method on each of the two objects must produce the same integer result. It is not required that if two objects are unequal according to the equals(java.lang.object) method, then calling the hashcode method on each of the two objects must produce distinct integer results. However, the programmer should be aware that producing distinct integer results for unequal objects may improve the performance of hash tables.

Suprascrierea equals() si hashcode() Daca se suprascrie metoda equals() trebuie suprascrisa si metoda hashcode() class Employee { protected long employeeid; protected String firstname; protected String lastname; public boolean equals(object o){ if(o == null) return false; if(!(o instanceof Employee)) return false; Employee other = (Employee) o; return this.employeeid == other.employeeid; class Employee { protected long employeeid; protected String firstname; protected String lastname; public boolean equals(object o) { if (o == null) return false; if (!(o instanceof Employee)) return false; Employee other = (Employee) o; return this.employeeid == other.employeeid &&firstname.equals(other.firstname) &&lastname.equals(other.lastname); public int hashcode(){ return (int) employeeid; public int hashcode() { return (int) employeeid;