Microsoft Word - lab4.doc

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

Laborator 3

PROGRAMARE ORIENTATA PE OBIECTE

Ingineria Sistemelor de Programare

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

Paradigme de Programare

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

Microsoft Word _POO_Lab_1_Modificari_v01.htm

Microsoft Word - CarteC.doc

Paradigme de programare

SUBPROGRAME

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

Top

Proiectarea Sistemelor Software Complexe

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

tehnologii web

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

CURS

Slide 1

Microsoft Word - 2 ES RO.doc

proiectarea bazelor de date

-

Limbaje de Programare Curs 6 – Functii de intrare-iesire

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

Înregistrator de temperatură şi umiditate AX-DT100 Instrucţiuni de utilizare

Microsoft PowerPoint - Curs_TPI_22_v01.ppt

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

Microsoft PowerPoint - Curs_SDA_9_RO_2019_v2.pptx

CABINET MINISTRU

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

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 2: Instrucţiuni Java şi lucru cu şiruri de caractere Întocmit de: Adina Neculai Îndrumător: Asist. Drd. Gabriel Danciu 18 octombrie 2011

Programarea şi utilizarea calculatoarelor

E_d_Informatica_sp_MI_2015_bar_02_LRO

Lucrarea 10

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

Tablouri (continuare)

Cursul 13 Mulţimi Julia Fie f : C C o funcţie complexă şi fie f n = f f f iterata de ordin n a lui f. Peste tot în continuare vom presupune că f este

Object Oriented Programming

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

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

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

E_d_Informatica_sp_SN_2014_bar_10_LRO

Advance CAD 2016 SP1 Acest document descrie îmbunătățirile pentru Advance CAD 2016 Service Pack 1. Notă: Advance CAD 2016 Service Pack 1 este compatib

Addendum Syllabus 6 Microsoft Access 2016 REF Syllabus 6.0 Cunoașterea domeniilor în care se utilizează bazele de date Datorită potenţialului ma

PowerPoint Presentation

Limbaje de Programare Curs 8 – Fisiere

Logică și structuri discrete Limbaje regulate și automate Marius Minea marius/curs/lsd/ 24 noiembrie 2014

Departamentul de Management al Cercetării-Inovare- Granturi şi Finanţare Proiecte de Cercetare

Laborator 1 suport teoretic Mediul de dezvoltare Eclipse GLOSAR - Aplicaţie: program obţinut în urma aplicării operației BUILD asupra unui proiect (ve

REVISAL Versiunea: Data release: 15 martie 2016 IMPORTANT! Distribuţia curentă (v6.0.4) a aplicaţiei Revisal conţine nomenclatorul COR ISCO 08 î

Cuantizare Vectoriala.doc

L7

BAREM PROFIL UMANIST Subiectul 1 (40 de puncte) Nr Itemul Variante acceptabile Specificări Punctaj total 1. Rescrie, din lista propusă, un sinonim con

Microsoft Word - Curs_09.doc

Programarea şi utilizarea calculatoarelor

EXCEL FĂRĂ SECRETE Grafice şi diagrame

Ingineria Sistemelor de Programare

Microsoft PowerPoint - ARI_R_c9-10_IP_part2 [Compatibility Mode]

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

Informație și comunicare

AD

Caraivan George-Alexandru Grupa 431A Interfața driver-kernel la Linux Introducere Deși pentru unii dintre noi acest lucru poate fi o supriză, cei mai

Curs 10

Microsoft Word - CarteC.doc

programă şcolară pentru clasa a 11a, liceu

Microsoft Word - CarteC.doc

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

Microsoft Word - Istoric Modificari declaratii WM.doc

Universitatea Politehnica din Bucureşti 2019 Disciplina: Geometrie şi Trigonometrie G1 * Varianta A 1. Ştiind cos x = 3 2, atunci sin2 x

PowerPoint Presentation

MANUAL DE UTILIZARE TERMOSTAT DE CAMERĂ EBERLE INSTAT PLUS 3R Cod produs: I. Instrucţiuni de utilizare Manevrarea produsului (privire de ansamb

PPSD

Microsoft Word - grile.doc

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

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

Информационная система персонализации, печати и учета документов об образовании

-

Microsoft Word - Curs_10.doc

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

客厅电脑 酷影Q1000

C++ Probleme

Modul Modbus ASCII SISTEME DE COMUNICATIE CURS 5 - Constantinescu Catalin Atunci cand se foloseste modul MODBUS ASCII fiecare octet din mesaj

Gestionarea I/E

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

GHIDUL SOLICITANTULUI INSTRUCŢIUNI DE COMPLETARE A APLICAŢIEI ONLINE DE SOLICITARE A FINANŢĂRILOR NERAMBURSABILE PENTRU PROIECTE EDITORIALE

7. Alinierea robustă a densităţilor de puncte 3D Măsurarea distanţei dintre diferite forme geometrice 3D Estimarea rotaţiei şi a translaţiei optime în

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

Ghid de conectare rapidă Cartela Internet Vodafone VMC R9.4 Cartela Internet Vodafone funcţionează cu aplicaţia Vodafone Mobile Connect


PowerPoint Presentation

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

Subiectul 1

Declararea variabilelor

Microsoft Word - GHID Solicitant Culturale I doc

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

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

Transcriere:

Lucrarea 4 Moştenire şi polimorfism Cuprins Relaţia de moştenire în Java...1 Reguli de vizibilitate în contextul relaţiei de moştenire...2 Constructorii şi moştenirea...4 Operatorul instanceof...4 Redefinirea metodelor...5 Legarea dinamică şi constructorii...7 Temă...8 Tehnologia orientată pe obiecte permite extinderea comportamentului unei clase existente prin definirea unei clase noi, care moşteneşte conţinutul primei clase, adăugând la acesta elementele specifice ei. Clasa moştenită se numeşte clasă de bază sau superclasă, iar clasa care realizează extinderea se numeşte subclasă, clasă derivată, sau clasă descendentă. Relaţia de moştenire este o relaţie de forma este un fel de, adică subclasa este un fel de superclasă. Practic, relaţia de moştenire între clase este o reflectare a ierarhizării existente între entităţile modelate de clasele respective. Relaţia de moştenire prezintă două aspecte esenţiale: reutilizare de cod polimorfism. Relaţia de moştenire în Java În Java, relaţia de moştenire dintre o superclasă şi o subclasă se exprimă astfel: class nume_subclasa extends nume_superclasa { //conţinut specific subclasei Se consideră clasa Poligon şi o clasă Dreptunghi care moşteneşte clasa Poligon: class Poligon { protected double[ ] laturi; public Poligon(int n) { laturi = new double[n] public double perimetru( ) { double s=0; for(int i=0;i<laturi.length;i++) s+=laturi[i]; return s; class Dreptunghi extends Poligon { public Dreptunghi(double L, double h){ super(4); laturi[0] = laturi[2] = L;

Programare Java, Laborator 4 laturi[1] = laturi[3] = h; public double aria( ){ return laturi[0]*laturi[1]; Clasa Dreptunghi reutilizează codul definit în clasa Poligon, la care adaugă elemente proprii. Pe lângă Dreptunghi, am putea defini şi alte clase, cum ar fi Triunghi, Patrat, Pentagon etc. care să moştenească Poligon. Superclasa este factorul comun al subclaselor sale sau, altfel spus, codul factorului comun este reutilizat în subclase. Despre relaţia de moştenire în Java se pot spune următoarele: o subclasă poate extinde o singură superclasă (moştenire simplă) o superclasă poate fi moştenită de mai multe subclase distincte o subclasă poate fi superclasă pentru alte clase o clasă de bază împreună cu toate descendentele ei formează o ierarhie de clase. Reguli de vizibilitate în contextul relaţiei de moştenire Regulile de vizibilitate vor fi discutate din două perspective: accesul funcţiilor unei subclase la membrii moşteniţi de la superclasele ei accesul clienţilor unei subclase la membrii ei, moşteniţi sau specifici Accesul funcţiilor unei subclase la membrii moşteniţi: Pentru a ilustra drepturile de acces vom lua următorul exemplu: class SuperClasa { private int priv; protected int prot; public int pub; class SubClasa extends SuperClasa { private int priv_local; protected int prot_local; public int pub_local; public void metoda(subclasa p ) { priv = 1; //eroare prot = 2; //corect pub = 3; //corect priv_local = 4; //corect prot_local = 5; //corect pub_local = 6; //corect p.priv = 1; //eroare p.prot = 2; //corect p.pub = 3; //corect p.priv_local = 4; //corect 2

Moştenire şi polimorfism p.prot_local = 5; //corect p.pub_local = 6; //corect În metodele specifice ale unei subclase pot fi referiţi acei membri moşteniţi, care în superclasă au fost precedaţi de modificatorii protected sau public. Membrii moşteniţi, care în superclasă sunt precedaţi de modificatorul private, deşi fizic fac parte din subclasă, nu sunt accesibili în metodele acesteia. Referirea membrilor moşteniţi se face direct, folosind numele lor, la fel ca referirea membrilor specifici. Acest lucru este foarte normal, deoarece şi membrii moşteniţi sunt conţinuţi în subclasă, numai că ei nu au fost declaraţi explicit. Includerea lor se face automat, ca efect al clauzei extends. Acest lucru nu este valabil şi pentru constructori. Revenind la exemplul cu clasele Poligon Dreptunghi, trebuie spus că un obiect al clasei Dreptunghi conţine doi constructori: unul moştenit, responsabil cu iniţializarea porţiunii moştenite, şi unul local, responsabil cu iniţializarea porţiunii specifice subclasei. Referirea în subclasă la constructorul moştenit se face folosind cuvântul cheie super, aşa cum se observă în constructorul clasei Dreptunghi. Cuvântul super este un omolog al lui this şi reprezintă referinţa la partea moştenită a unui obiect. În afară de apelul constructorului moştenit, cuvântul super se va utiliza pentru a distinge între un membru local al subclasei şi un membru moştenit, ambii cu acelaşi nume. Accesul clienţilor unei subclase la membrii acesteia Exemplului din paragraful anterior i se adaugă secvenţa următoare: class Client { public void ofunctie( ) { SuperClasa sp = new SuperClasa(); SubClasa sb = new SubClasa(); sp.priv = 1; //eroare sp.prot = 2; //corect, doar dacă Client şi SuperClasa s-ar afla in acelaşi pachet sp.pub = 3; //corect sb.priv = 1; //eroare sb.prot = 2; //corect, doar dacă Client şi SubClasa s-ar afla în acelaşi pachet sb.pub = 3; //corect sb.priv_local = 4; //eroare sb.prot_local = 5; //corect, doar dacă Client şi SubClasa s-ar afla în acelaşi pachet sb.pub_local = 6; //corect În clienţii unei subclase pot fi referiţi acei membri, moşteniţi sau locali, care sunt precedaţi de modificatorul public. Membrii declaraţi ca protected sunt accesibili numai în situaţia în care clientul se află în acelaşi pachet cu subclasa respectivă. La referirea membrilor unei subclase de către client, nu se face deosebire între membrii moşteniţi şi cei locali. 3

Programare Java, Laborator 4 Constructorii şi moştenirea În exemplul anterior se observă că cele două clase nu au constructori expliciţi, constructorul SubClasa() fiind de forma: public SubClasa() { super( ); Constructorul subclasei apelează constructorul no-arg al superclasei. Dacă pentru SuperClasa am fi definit un constructor no-arg explicit, atunci acesta ar fi fost cel apelat de constructorul SubClasa. Dacă ar fi existat un constructor oarecare în SubClasa, iar acesta nu ar fi apelat explicit vreun constructor din SuperClasa, în mod automat se încearcă apelul constructorului no-arg super(), înainte de a se executa instrucţiunile din constructorul SubClasa: public SubClasa(...) { super(); //apel implicit //alte instrucţiuni prevăzute de programator Dacă SuperClasa nu are constructor no-arg, apelul implicit de mai sus ar genera eroare. Prin urmare, dacă programatorul defineşte constructori expliciţi într-o subclasă, el trebuie să aibă grijă ca aceşti constructori să apeleze explicit constructorii adecvaţi ai superclasei: super (parametri-actuali) Un asemenea apel trebuie să fie prima instrucţiune din constructorul subclasei. Constructorul unei subclase se defineşte astfel încât lista lui de parametri să se compună dintrun set de parametri necesari iniţializării câmpurilor moştenite (transmis constructorului super) şi un alt set, necesar iniţializării câmpurilor locale. Execuţia constructorului se desfăşoară în 3 etape: apelul constructorului superclasei iniţializarea câmpurilor cu valori date la declarare şi execuţia blocurilor de iniţializare, unde este cazul execuţia corpului propriu-zis al constructorului. Operatorul instanceof Prin intermediul unei referinţe de superclasă putem indica şi utiliza şi obiecte ale subclaselor ei. Operatorul instanceof este util atunci când trebuie să cunoaştem clasa concretă de care aparţine un obiect referit prin intermediul unei referinţe a unui supertip. Aplicarea operatorului se face printr-o expresie de forma: referinta_obiect instanceof nume_clasa 4

Moştenire şi polimorfism Redefinirea metodelor Relaţia de moştenire poate fi utilizată atunci când o anumită clasă (subclasă) extinde comportamentul altei clase (superclase), în sensul că superclasa înglobează aspectele comune ale unei ierarhii de abstracţiuni, iar subclasele adaugă la această parte comună funcţiuni specifice. De asemenea, o referinţă la superclasă poate indica şi manipula obiecte ale oricărei clase descendente din ea. Manipularea se referă la faptul că, prin intermediul acelei referinţe se pot apela metodele definite în superclasă, indiferent dacă obiectul concret aparţine superclasei sau uneia dintre subclase. Această facilitate constituie aşa-numitul polimorfism parţial. Folosind o referinţă a superclasei nu se poate, însă, apela o metodă locală a subclasei, decât dacă se realizează o conversie explicită (casting) a referinţei, la tipul subclasei. În Java relaţia de moştenire poate fi aplicată şi în cazul în care se doreşte ca, pe lângă extinderea comportamentului, să realizăm şi o adaptare (specializare) a lui, în sensul că unele metode care în superclasă au o anumită implementare, în subclase să aibă o altă implementare, adaptată la cerinţele locale ale subclasei. class Angajat{ protected String nume; protected double sal_ora; public Angajat(String nume, double sal_ora) { this.nume = nume; this.sal_ora = sal_ora; public double calcsalar(int nr_ore) { return (sal_ora * nr_ore); public String tostring() { return nume; class Sef extends Angajat { private double proc_cond; //procent de indemnizaţie conducere public Sef(String nume, double sal_ora, double proc_cond) { super(nume, sal_ora); this.proc_cond = proc_cond; public double calcsalar(int nr_ore) { return ((1 + proc_cond / 100) * sal_ora *nr_ore); class Client { public void ometoda { Angajat a1 = new Angajat("Artaxerse Coviltir",1000); Angajat a2 = new Sef("Al Bundy", 2000, 33.2); int ore_luna = 160; System.out.println("Salar " + a1 + "=" + a1.calcsalar(ore_luna)); 5

Programare Java, Laborator 4 System.out.println("Salar " + a2 + "=" + a2.calcsalar(ore_luna)); //... Se observă că aceeaşi metodă, calcsalar() apare atât în clasa Angajat, cât şi în clasa Sef, dar cu implementări diferite. Atunci când într-o subclasă apare o metodă având semnătura identică cu o metoda din superclasă, se spune că metoda din subclasă o redefineşte pe omonima ei din superclasa. În acest caz, un obiect al subclasei practic are două exemplare ale metodei respective, unul moştenit şi unul propriu. Ce se întâmplă la nivelul clienţilor ierarhiei? Se observă că în metoda ometoda() din clasa Client se folosesc două referinţe la Angajat: una indică un obiect al clasei Angajat, iar cealaltă un obiect al clasei Sef. Prin intermediul celor două referinţe se apelează metoda calcsalar(). Se pune problema care dintre cele două forme ale metodei se apelează efectiv? În Java, regula care se aplică în asemenea cazuri este următoarea: Se va executa întotdeauna acel exemplar de metodă care este definit în clasa la care aparţine obiectul concret indicat de referinţa utilizată. Cu alte cuvinte, clasa obiectului dictează şi nu tipul referinţei. Astfel, deşi ambele referinţe a1 şi a2 din exemplul considerat sunt de tip Angajat, ele indică, de fapt, obiecte ale unor clase diferite. Deci, apelul a1.calcsalar(...) va declanşa execuţia metodei calcsalar() definită în clasa Angajat, iar apelul a2.calcsalar(...) va declanşa execuţia metodei calcsalar() definită în clasa Sef. Polimorfismul permite interschimbarea obiectelor indicate de o referinţă a superclasei, într-o manieră transparentă pentru clienţi. În Java, clasa concretă la care aparţine un obiect indicat de o referinţă se cunoaşte, însă, abia la execuţia programului. Deci, un apel de metodă nu este rezolvat (adică pus în corespondenţă cu o implementare anume) la compilare, ci doar la execuţie. Acest procedeu se numeşte legare dinamică sau amânată (late binding). S-a spus mai sus că un obiect al clasei Sef posedă două metode calcsalar(): cea moştenită de la Angajat şi cea locală. Din cauză că în Java se aplică legarea dinamică, înseamnă că, din perspectiva clienţilor clasei Sef varianta locală o eclipsează pe cea moştenită, neexistând posibilitatea ca un client să forţeze apelul metodei moştenite (decât aplicând o soluţie ocolitoare, adică folosind o metodă cu alt nume care să apeleze metoda calcsalar() moştenită). În interiorul subclasei se poate realiza distincţia între cele două variante ale unei metode redefinite, şi anume folosind simbolul super. Astfel, metoda calcsalar() din clasa Sef se poate folosi de omonima ei din clasa Angajat: class Sef extends Angajat { //... public double calcsalar(int nr_ore) { return ((1 + proc_cond / 100) * super.calcsalar(nr_ore)); Practic, aceasta este singura situaţie în care nu se aplică legarea dinamică, ci apelul de forma super.numemetoda(...) este pus în corespondenţă exact cu implementarea din superclasa clasei curente. 6

Moştenire şi polimorfism Legarea dinamică şi constructorii Deoarece în Java la apelul metodelor non-statice se aplică legarea dinamică, pe de o parte, şi ţinând cont de modul în care se apelează constructorii într-o ierarhie de clase, pe de altă parte, trebuie să avem grijă cum proiectăm constructorii dacă aceştia apelează la rândul lor metode ale claselor respective. class SuperClasa { protected int a; protected int rez; private int x; public SuperClasa( ) { a = 1; rez = 2; x = calcul( ); public int calcul( ) { return (rez + a); class SubClasa extends SuperClasa { protected int b; private int y; public SubClasa( ) { b =3; y = calcul( ); public int calcul( ) { return (rez * b); class Client { public void ometoda { SubClasa ob = new SubClasa( ); //... Să urmărim ce se întâmplă la crearea unui obiect al clasei Subclasa: ţinând cont de ordinea în care au loc iniţializările câmpurilor unui obiect, înseamnă că se execută următorii paşi: câmpurile a, rez, x, b şi y se iniţializează cu valorile implicite corespunzătoare tipurilor lor, deci, în cazul nostru cu 0; se lansează constructorul SubClasa(); ca primă acţiune a acestuia are loc apelul constructorului no-arg SuperClasa(); în constructorul SuperClasa() se execută iniţializările lui a şi rez cu 1, respectiv 2, după care se apelează metoda calcul(). În acest moment, apelul se leagă de varianta metodei calcul() definită în clasa SubClasa, de care aparţine obiectul în curs de iniţializare. Efectul este că x se va iniţializă cu valoarea 2 * 0, adică cu 0, deoarece la momentul respectiv câmpul b încă nu a apucat să primească o altă valoare; 7

Programare Java, Laborator 4 se revine în constructorul SubClasa(), se iniţializează b cu 3 şi y cu 2*3= 6, cât returnează metoda calcul() din SubClasa. Dacă în constructorul unei superclase se apelează o metodă care este redefinită în subclasă, la crearea unui obiect al subclasei există riscul ca metoda respectivă să refere câmpuri neiniţializate încă la momentul apelului. Temă 1. Să se ruleze exemplele prezentate în lucrare. Exemplele vor fi completate cu afişări şi unde e nevoie cu metode get şi / sau set astfel încât să poată fi urmărit modul lor de funcţionare. 2. Problema propusă încearcă să dea o mână de ajutor în gestionarea produselor unei firme care comercializează echipamente electronice. Fiecare echipament este înregistrat cu o denumire, un număr de inventar nr_inv, are un preţ pret şi este plasat într-o anumită zonă din magazie zona_mag. Orice echipament poate fi într-una din situaţiile: achiziţionat (intrat în magazie); expus (expus în magazin); vândut (transportat şi instalat la client). Firma comercializează mai multe tipuri de echipamente. Toate echipamentele care folosesc hârtia drept consumabil sunt caracterizate de numărul de pagini scrise pe minut ppm. Imprimantele sunt caracterizate de rezoluţie (număr de puncte per inch dpi) şi număr de pagini/cartuş p_car. Unei imprimante i se poate seta modul de scriere: tipărirecolor (selectere a modului color de tipărire); tipărirealbnegru (selectere a modului alb-negru de tipărire). Copiatoarele sunt caracterizate de numărul de pagini/toner p_ton. Se poate seta formatul de copiere: setformata4 (setare a formatului A4); setformata3 (setare a formatului A3). Sistemele de calcul au un monitor de un anumit tip tip_mon, un procesor de o anumită viteză vit_proc, o capacitate a HDD c_hdd şi li se poate instala unul din sistemele de operare: instalwin (instalarea unei variante de Windows); installinux (instalarea unei variante de Linux). Metodele de mai sus vor seta parametrii corespunzători. Să se realizeze ierarhia de clase corespunzătoare modelului prezentat; Să se creeze UN SINGUR VECTOR în care să fie preluate datele din fişierul de intrare electronice.txt. Se va dezvolta un meniu care va oferi următoarele facilităţi: Afişarea imprimantelor Afişarea copiatoarelor Afişarea sistemelor de calcul Modificarea stării în care se află un echipament Setarea unui anumit mod de scriere pentru o imprimantă Setarea unui format de copiere pentru copiatoare Instalarea unui anumit sistem de operare pe un sistem de calcul Afişarea echipamentelor vândute 8