SlideShare une entreprise Scribd logo
1  sur  31
Programarea orientată pe obiecte Curs 2
Clase şi obiecte ,[object Object]
Clase şi obiecte ,[object Object]
Modificatori
Crearea obiectelor
Supraîncărcarea metodelor
Metoda main
Tablouri
Enumerări
Clase înfăşurătoare
Clase şi metode generice
Clase şi obiecte (2) ,[object Object]
Clasa este  tiparul  care defineşte  variabilele de stare  ale unui obiect şi
operaţiile permise  asupra obiectului
În C#: variabile de stare =  câmpuri , operaţii =  metode
Câmpurile, metodele şi sema n tica lor =  contractul clasei
Reprezentarea câmpurilor şi  implementarea  (codul) metodelor  se pot modifica ,
dacă nu afectează contractul ( open/close principle )
Este recomandabil ca numai unele dintre metode (de regulă nu şi câmpurile )
să fie vizibile utilizatorilor   Trebuie şi un  mecanism de control al vizibilităţii
elementelor
Alt mecanism:  crearea de obiecte  (în C#:  operatorul  new  aplicat pe un
constructor al clasei)
Elementele componente ale unei clase Cazul general:  1) câmpuri; 2) metode; 3) clase şi interfeţe încuibate Oricare dintre elemente pot lipsi class   Persoana { public   String  CNP;  // cod numeric personal public   String  nume;  // numele persoanei public   Persoana  pereche;  // sotul/sotiei public   static   long  populatie = 0; public  Persoana( String  nume,  String  CNP,  Persoana  peer) { this .nume = nume; this .CNP = CNP; pereche = peer;  //!!! populatie++; } public   String  getNume() { return  nume; } public   bool  checkCNP() { return   true ;  // nu e obligatoriu sa fie true :) } }
Campuri Variabile  de exemplar  şi variabile  de clasă Iniţializatori : constante sau expresii de tip corespunzător cu al câmpului,  stabilesc valoarea iniţială Exemple: double sapte = 3.5 * 2; // expresie constanta   double altSapte = sapte; // expresie cu alt camp al obiectului   double sin45 = Math.sin(Math.PI/4); // apel de metoda   double expr = sapte + Math.sqrt(sin45); //expresie combinata Tipuri predefinite Tipuri predefinite  non-obiecte : numerice, char, boolean Tipuri numerice:  Byte, short, int, long, float, double Char :reprezentare Unicode câmpuri  constante : declarate cu  final   câmpurile cu tip clasă conţin  referinţe  !!
Metode (1) ,[object Object]
Antet:  modificatori ,  tipul val. returnate ,  semnătura ;
Semnătura : nume + lista de parametri
Corpul : instrucţiuni între acolade class   Persoana { //declaratii de campuri, variabile si initializari public   String  ToString() { String  reprez =  "Persoana "  + nume + " are codul numeric personal "  + CNP +  "si " ; if  (pereche ==  null ) reprez +=  "nu " ; return  reprez +  " este casatorita." ; } public   static   void  main( String [] args) { Persoana  pers =  new   Persoana (); pers.CNP =  "1760223364760" ; pers.nume =  "Ion Ionescu" ; Console .WriteLine(pers.ToString()); } }
Metode (2) ,[object Object]
S-a folosit un  constructor no-arg ,  Persoana()

Contenu connexe

En vedette (8)

Lecture5 - PC
Lecture5 - PCLecture5 - PC
Lecture5 - PC
 
Trandafiri ingrijire inmultire
Trandafiri ingrijire inmultireTrandafiri ingrijire inmultire
Trandafiri ingrijire inmultire
 
Curs2 poo 2016
Curs2 poo 2016Curs2 poo 2016
Curs2 poo 2016
 
Ferigi
FerigiFerigi
Ferigi
 
Curs1 poo 2016
Curs1 poo 2016Curs1 poo 2016
Curs1 poo 2016
 
Laleaua ppt
Laleaua pptLaleaua ppt
Laleaua ppt
 
0 padurea
0 padurea0 padurea
0 padurea
 
Europa de vest
Europa de vestEuropa de vest
Europa de vest
 

Similaire à Curs2-POO

Sabin Buraga — JavaScript
Sabin Buraga — JavaScriptSabin Buraga — JavaScript
Sabin Buraga — JavaScriptSabin Buraga
 
2006 intro java_v01
2006 intro java_v012006 intro java_v01
2006 intro java_v01Usurelu Ion
 
Structuri De Date Alocate Dinamic
Structuri De Date Alocate DinamicStructuri De Date Alocate Dinamic
Structuri De Date Alocate DinamicCarmen Negrea
 
Manual de programare c
Manual de programare cManual de programare c
Manual de programare cArgos
 
manual-de-programare-c
manual-de-programare-cmanual-de-programare-c
manual-de-programare-cSerghei Urban
 

Similaire à Curs2-POO (7)

Cap06
Cap06Cap06
Cap06
 
Sabin Buraga — JavaScript
Sabin Buraga — JavaScriptSabin Buraga — JavaScript
Sabin Buraga — JavaScript
 
Tehnologii Java
Tehnologii JavaTehnologii Java
Tehnologii Java
 
2006 intro java_v01
2006 intro java_v012006 intro java_v01
2006 intro java_v01
 
Structuri De Date Alocate Dinamic
Structuri De Date Alocate DinamicStructuri De Date Alocate Dinamic
Structuri De Date Alocate Dinamic
 
Manual de programare c
Manual de programare cManual de programare c
Manual de programare c
 
manual-de-programare-c
manual-de-programare-cmanual-de-programare-c
manual-de-programare-c
 

Plus de Alexandru IOVANOVICI

Plus de Alexandru IOVANOVICI (18)

CanSat Tehnical Workshop
CanSat Tehnical WorkshopCanSat Tehnical Workshop
CanSat Tehnical Workshop
 
TRENDS AND CHALLENGES IN THE DAWN OF INTERNET OF THINGS ERA
TRENDS AND CHALLENGES IN THE DAWN OF INTERNET OF THINGS ERATRENDS AND CHALLENGES IN THE DAWN OF INTERNET OF THINGS ERA
TRENDS AND CHALLENGES IN THE DAWN OF INTERNET OF THINGS ERA
 
Android powered internet of things
Android powered internet of thingsAndroid powered internet of things
Android powered internet of things
 
Golden
GoldenGolden
Golden
 
GDG-CJ; Andorid and Arduino: Amarino
GDG-CJ; Andorid and Arduino: AmarinoGDG-CJ; Andorid and Arduino: Amarino
GDG-CJ; Andorid and Arduino: Amarino
 
tm.gdg.ro: Android on Raspberry Pi
tm.gdg.ro: Android on Raspberry Pitm.gdg.ro: Android on Raspberry Pi
tm.gdg.ro: Android on Raspberry Pi
 
Aiesec University 2012-arduino
Aiesec University 2012-arduinoAiesec University 2012-arduino
Aiesec University 2012-arduino
 
PhD Admission Pitching
PhD Admission PitchingPhD Admission Pitching
PhD Admission Pitching
 
Power analysis of H.264/AVC for mobile platforms
Power analysis of H.264/AVC for mobile platformsPower analysis of H.264/AVC for mobile platforms
Power analysis of H.264/AVC for mobile platforms
 
Arduino and Internet of Thinks: ShareIT TM: march 2010, TM
Arduino and Internet of Thinks: ShareIT TM: march 2010, TMArduino and Internet of Thinks: ShareIT TM: march 2010, TM
Arduino and Internet of Thinks: ShareIT TM: march 2010, TM
 
Biblioteca Virtuala Timis
Biblioteca Virtuala TimisBiblioteca Virtuala Timis
Biblioteca Virtuala Timis
 
Prezentare tcs2011
Prezentare tcs2011Prezentare tcs2011
Prezentare tcs2011
 
Culegere de aplicatii de TIC
Culegere de aplicatii de TICCulegere de aplicatii de TIC
Culegere de aplicatii de TIC
 
Public Libraries and Education (school)
Public Libraries and Education (school)Public Libraries and Education (school)
Public Libraries and Education (school)
 
Recursivitate: Aplicatii in C
Recursivitate: Aplicatii in CRecursivitate: Aplicatii in C
Recursivitate: Aplicatii in C
 
Parcurgerea Grafurilor Neorientate
Parcurgerea Grafurilor NeorientateParcurgerea Grafurilor Neorientate
Parcurgerea Grafurilor Neorientate
 
Wikitrafic
WikitraficWikitrafic
Wikitrafic
 
Curs5-PC-Cl9
Curs5-PC-Cl9Curs5-PC-Cl9
Curs5-PC-Cl9
 

Curs2-POO

  • 1. Programarea orientată pe obiecte Curs 2
  • 2.
  • 3.
  • 11. Clase şi metode generice
  • 12.
  • 13. Clasa este tiparul care defineşte variabilele de stare ale unui obiect şi
  • 14. operaţiile permise asupra obiectului
  • 15. În C#: variabile de stare = câmpuri , operaţii = metode
  • 16. Câmpurile, metodele şi sema n tica lor = contractul clasei
  • 17. Reprezentarea câmpurilor şi implementarea (codul) metodelor se pot modifica ,
  • 18. dacă nu afectează contractul ( open/close principle )
  • 19. Este recomandabil ca numai unele dintre metode (de regulă nu şi câmpurile )
  • 20. să fie vizibile utilizatorilor  Trebuie şi un mecanism de control al vizibilităţii
  • 22. Alt mecanism: crearea de obiecte (în C#: operatorul new aplicat pe un
  • 24. Elementele componente ale unei clase Cazul general: 1) câmpuri; 2) metode; 3) clase şi interfeţe încuibate Oricare dintre elemente pot lipsi class Persoana { public String CNP; // cod numeric personal public String nume; // numele persoanei public Persoana pereche; // sotul/sotiei public static long populatie = 0; public Persoana( String nume, String CNP, Persoana peer) { this .nume = nume; this .CNP = CNP; pereche = peer; //!!! populatie++; } public String getNume() { return nume; } public bool checkCNP() { return true ; // nu e obligatoriu sa fie true :) } }
  • 25. Campuri Variabile de exemplar şi variabile de clasă Iniţializatori : constante sau expresii de tip corespunzător cu al câmpului, stabilesc valoarea iniţială Exemple: double sapte = 3.5 * 2; // expresie constanta double altSapte = sapte; // expresie cu alt camp al obiectului double sin45 = Math.sin(Math.PI/4); // apel de metoda double expr = sapte + Math.sqrt(sin45); //expresie combinata Tipuri predefinite Tipuri predefinite non-obiecte : numerice, char, boolean Tipuri numerice: Byte, short, int, long, float, double Char :reprezentare Unicode câmpuri constante : declarate cu final câmpurile cu tip clasă conţin referinţe !!
  • 26.
  • 27. Antet: modificatori , tipul val. returnate , semnătura ;
  • 28. Semnătura : nume + lista de parametri
  • 29. Corpul : instrucţiuni între acolade class Persoana { //declaratii de campuri, variabile si initializari public String ToString() { String reprez = "Persoana " + nume + " are codul numeric personal " + CNP + "si " ; if (pereche == null ) reprez += "nu " ; return reprez + " este casatorita." ; } public static void main( String [] args) { Persoana pers = new Persoana (); pers.CNP = "1760223364760" ; pers.nume = "Ion Ionescu" ; Console .WriteLine(pers.ToString()); } }
  • 30.
  • 31. S-a folosit un constructor no-arg , Persoana()
  • 32. Metodele pot fi: de exemplar (ex. ToString ) sau de clasă / statice (ex. main )
  • 33. Metodele statice au acces numai la câmpurile statice ! class Persoana { //declaratii de campuri, variabile si initializari public String ToString() { String reprez = "Persoana " + nume + " are codul numeric personal " + CNP + "si " ; if (pereche == null ) reprez += "nu " ; return reprez + " este casatorita." ; } public static void Main( String [] args) { Persoana pers = new Persoana (); pers.CNP = "1760223364760" ; pers.nume = "Ion Ionescu" ; Console .WriteLine(pers.ToString()); } }
  • 34.
  • 35.
  • 36. Ajunge la sfârşitul corpului metodei }
  • 37.
  • 38.
  • 39. În metode se lucrează cu copii ale parametrilor .
  • 40. Valorile din metoda apelantă ( param. actuali ) nu sunt afectate
  • 41.
  • 42. modif. referinţei nu are efect în apelant
  • 43. Metode (4) In cazul valorilor elementare: class ValElem { public static void main( String [] args) { double a = 2.3, b = 4.5; Console .WriteLine( " a initial = " + a); suma(a, b); Console .WriteLine( " a final = " + a); } public static void suma( double x, double y) { x = x + y; Console .WriteLine( "arg 1 in metoda = " +x); } } In cazul referintelor: class ValRef { public static void main( String [] args) { Persoana pers = new Persoana (); pers.CNP = "2780609364760" ; pers.nume = "Maria Ionescu" ; Console .WriteLine( "Nume initial: " + pers.nume); casatorie(pers); Console .WriteLine( "Nume final: " + pers.nume); } public static void casatorie( Persoana refp) { refp.nume = "Maria Popescu" ; refp = null ; } }
  • 44. Metode (5) casatorie() main() Maria IONESCU casatorie() main() Maria IONESCU before after ? OBIECT cnp, nume, pereche pers refp OBIECT cnp, nume, pereche pers refp
  • 45.
  • 46. În C# param. obiecte nu se transm. prin ref., se transm. prin valoare referintei la obiecte .
  • 47. Param. decl. final nu se pot modif. în codul metodei.
  • 48. metode cu nr. variabil de param. : ultimul param. specif. dă tipul argum. nespecificate public void IntParams( string Message, params int [] p) { Console .WriteLine(Message); for ( int i = 0; i < p.Length; i++) { Console .WriteLine(p[i]); } }
  • 49.
  • 50.
  • 51. protected – accesibil in metodele clasei curente si acelor drivate din ea si in namespace-ul curent;
  • 52. public – accesibil oriunde este acesibila clasa;
  • 53.
  • 54. Atentie: modificatorii de acces actioneaza la nivel de clasa si nu de obiect;
  • 55.
  • 56.
  • 57.
  • 58. s ynchronized : nu poate fi executat ă simultan în două fire de execuţie
  • 59.
  • 60. Dacă este spaţiu, se exec. constr., după iniţializarea implicită
  • 61.
  • 62.
  • 63.
  • 64. Crearea obiectelor Constructori (2) class Complex { private float pReal = 0; private float pImag = 0; public Complex( float pReal) { this. pReal = pReal ; } public Complex( float pReal , float pImag) { this. pReal = pReal; this. pImag = pImag; } //.....
  • 65.
  • 66. Trebuie să difere prin numărul şi/sau tipul parametrilor si ordinea parametrilor
  • 67. La apelul unei metode (în codul sursă) compil. determină cea mai bună corespondenţă pt. a selecta metoda
  • 68. Obs : tipul val. ret. nu e parte din semnătură => metodele nu se pot deosebi numai prin valoarea returnată
  • 69.
  • 70. main este obligatoriu public, static şi nu ret. valoare
  • 71. main are un arg. tablou String, numit args
  • 72. Nu orice clasă trebuie să aibă main
  • 73. Suportul de exec. transm. spre main, în args, argumentele din linia de comandă
  • 74.
  • 75. Numărul de elem. din tablou se cere la creare. Nu se poate modifica
  • 76. Accesul la elem. tabl.: prin indici
  • 78. public final int L ength;
  • 79. Sunt permise tablori de lungime zero (tabl. vide)
  • 80. Sunt permise tablouri cu mai multe dimensiuni: int [][] intArray = new int [5][6];
  • 81. Tablouri (2) Se acceptă şi: int [,] b = { { 0, 1 }, { 2, 3 }, { 4, 5 }, { 6, 7 }, { 8, 9 } }; for ( int i = 0; i < triPas.Length; i++) triPas [i,0] = i; Similar, cu iniţializare: int [][] triPas = { { 1 }, { 1, 1 }, { 1, 2, 1 }, { 1, 3, 3, 1 } }; Managed array
  • 82.
  • 83. public enum Volume { Low, Medium, High }
  • 84. Numele între acolade: constantele (exemplarele) enumerării. Numai unul din acestea poate apare în orice utilizare a enumerării -> siguranţa tipurilor
  • 85. Toate enumerările derivă din Enum (clasă abstractă)
  • 86. Tablouri (2) Volume myVolume = Volume .Low; switch (myVolume) { case Volume .Low: Console .WriteLine( &quot;The volume has been turned Down.&quot; ); break ; case Volume .Medium: Console .WriteLine( &quot;The volume is in the middle.&quot; ); break ; case Volume .High: Console .WriteLine( &quot;The volume has been turned up.&quot; ); break ; }
  • 87. EnumTricks (1) // declares the enum public enum Volume : byte { Low = 1, Medium, High } Dorim sa implementam un mecanism care sa permita conversia bidirectionala intre un nr. intreg si un element al unei enumerari.
  • 88. EnumTricks (2) class Enumtricks { static void Main( string [] args){ Enumtricks enumtricks = new Enumtricks (); // demonstrates explicit cast // of int to Volume enumtricks.GetEnumFromUser(); // iterate through Volume enum by name enumtricks.ListEnumMembersByName(); // iterate through Volume enum by value enumtricks.ListEnumMembersByValue(); Console .ReadLine(); } /*...*/
  • 89. EnumTricks (3) // get value user provided string volString = Console .ReadLine(); int volInt = Int32 .Parse(volString); // perform explicit cast from // int to Volume enum type Volume myVolume = ( Volume )volInt; Console .WriteLine( &quot;Volume Enum Members by Name:&quot; ); // get a list of member names from Volume enum, // figure out the numeric value, and display foreach(string volume in Enum .GetNames(typeof ( Volume ))){ Console .WriteLine( &quot;Volume Member: {0} Value: {1}&quot; ,volume,(byte) Enum .Parse(typeof( Volume ), volume)); }
  • 90. EnumTricks (4) // get all values (numeric values) from the Volume // enum type, figure out member name, and display foreach ( byte val in Enum .GetValues( typeof ( Volume ))) { Console .WriteLine( &quot;Volume Value: {0} Member: {1}&quot; , val, Enum .GetName( typeof ( Volume ), val)); } Acest exemplu a fost preluat de la: http://www.csharp-station.com/Tutorials/Lesson17.aspx
  • 91.
  • 92. Există un singur cod al clasei Stiva . Compilatorul poate verifica dacă operaţiile cu obiecte sunt corecte, pentru că are info de tip complete class Nod <S, D> { // declaratii de campuri // declaratii de metode } Nod < String , Persoana >nod1= new Nod < String , Persoana >();
  • 93.
  • 94. GENÉRIC, -Ă, generici, -ce, adj. Care aparţine unei categorii întregi, privitor la o categorie întreagă (de fiinţe, obiecte , fenomene); care cuprinde toate cazurile de acelaşi fel. ♦ (Substantivat, n.) Partea de la începutul sau de la sfârşitul unui film, în care sunt indicate numele principalilor realizatori ai filmului respectiv. – Din fr. générique. [DexOnline]
  • 96. O clasă generică declară una sau mai multe variabile de tip , între paranteze unghiulare după numele clasei.
  • 97. Clase si metode generice Metode generice Variabilele de tip ale unei clase generice se fol. la decl. de câmpuri şi def. de metode ale clasei; public bool push(E elem) { if (top == 100) return false ; tab[top++] = elem; return true ; } public E pop() { if (top == 0) return default (E); ; return ((E)tab[--top]); } public void print() { for ( int i = top - 1; i >= 0; i--) { Console .Out.WriteLine((E)tab[i]); } }