Tema 1 POO 22354 - Programació Avançada
Antoni Jaume i Capó
Naming convention
¤ http://www.oracle.com/technetwork/java/javase/documentation/codeconventions-135099.html#367
Què és una classe? Què és un objecte?
¤ En programació orientada a objectes, una classe és una estructura d'un llenguatge de programació usada per agrupar membres/variables i mètodes/funcions. Està conceptualment relacionat amb classes de la teoria de conjunts.
¤ Un objecte és una instància real d’una classe.
¤ Uf! Aparquem el llenguatge acadèmic i anem a veure que és tot això.
Una explicació més entenedora?
¤ POO és una forma de programar: ¤ Una forma d’estructurar les dades i les funcions (unitat) ¤ Característiques i comportaments. ¤ A l’hora d’estructurar pot aparèixer una component subjectiva
¤ Un classe ens permet definir una entitat, un objecte representa una entitat concreta. ¤ Llenguatge no acadèmic.
¤ Hi ha llenguatges que faciliten aquest tipus de programació à Java.
¤ Davant un problema a resoldre à estructurar a partir de classes.
Definir una classe que representi una persona
Què és una persona?
¤ Un nom
¤ Uns llinatges
¤ Una edat
¤ Una professió
¤ Un DNI
¤ ...
¤ Moltes coses més!
Què fa una persona?
¤ Parla
¤ Camina
¤ Dorm
¤ Canta
¤ Balla
¤ ...
¤ Moltes coses més!
Definir una classe que representi una persona
¤ Definirem una persona a través d’una classe Persona, representarem persones a través d’objectes de la classe Persona. (ABSTRACCIÓ)
¤ Fer una representació completa d’una persona real amb una classe, a través de la POO és impossible!
¤ He de representar/estructurar el nostre codi amb les necessitats del problema. ¤ Si per resoldre el meu problema només necessit incloure el
nom i l’acció de ballar no he d’incloure res més. (simplificar a les necessitats).
Definir una classe que representi una persona a partir d’una definició
¤ DEFINICIÓ PERSONA: Volem representar una persona com un nom, dos llinatges i un NIF. La persona persona ha de poder dir el seu nom, els seus llinatges i el seu NIF a través de la sortida estàndard.
¤ Hem de poder saber el número de persones que hi ha.
¤ ENCAPSULACIÓ
¤ Que hem vist amb aquest exemple: ¤ Java tutorial:
¤ Lesson: Object-Oriented Programming Concepts ¤ http://docs.oracle.com/javase/tutorial/java/concepts/
index.html ¤ Lesson: Classes and Objects
¤ http://docs.oracle.com/javase/tutorial/java/javaOO/index.html
Encapsulació
¤ Entitat formada pel comportament (mètodes) i les dades (membres).
¤ Forma una entitat, una unitat.
Objectes vs classes: Mètodes i membres
¤ Poc a poc anam fent un disseny descendent del que és un objecte i el que és una classe. Respecte els membres (variables i els mètodes). ¤ Objecte
¤ Classe (static)
¤ Local
Objectes vs classes: constructor
¤ mètode que s’encarrega d’instànciar (crear) un objecte d’una classe concreta. ¤ Classe objClasse = new Classe();
¤ Declaració:
¤ Classe objClasse;
¤ Inicialitzar:
¤ objClasse = new Classe();
¤ Cada classe té un o més constructors
Objectes vs classes: Accés
¤ Classe objClasse = new Classe();
¤ Membres (variables i mètodes) d’objecte/instància ¤ objClasse.metode(); ¤ objClasse.variable;
¤ Membres de la classe ¤ Classe.metodeStatic(); ¤ Classe.variableStatic(); ¤ objClasse.metodeStatic(); ¤ objClasse.variableStatic();
¤ Estructura jeràrquica
Recordatori sobre classes en Java
¤ Una única classe pública per fitxer de codi
¤ El nom de classe pública és el mateix que el del fitxer .java. La classe Persona estarà definida a Persona.java à Ho fa l’IDE
¤ Els import s'han de declarar abans de la classe (class) ¤ Ho fa l’IDE.
Herència
¤ Qualsevol classe o objecte quan faig un accés sempre té més membres dels definits a la classe ¤ Classe._______
¤ objClasse._____
¤ Classe Object http://docs.oracle.com/javase/7/docs/api/index.html
¤ La POO ens permet crear objectes amb els mateixos membres (variables i mètodes) que una classe existent. ¤ public Class filla extends Pare{}.
Important
¤ Abstracció
¤ Encapsulació
¤ Herència
¤ Java Tutorial: ¤ http://docs.oracle.com/javase/tutorial/java/concepts/
index.html
API Java
¤ http://docs.oracle.com/javase/7/docs/api/
¤ Classe String ¤ http://docs.oracle.com/javase/7/docs/api/java/lang/
String.html
¤ Classes Wrapper ¤ Per poder utilitzar tipus primitius com a objectes
¤ Integer, Boolean, Long, Short, Float, Double, Character ¤ Package java.lang
http://docs.oracle.com/javase/7/docs/api/java/lang/package-summary.html
Wrappers
¤ Object o;
¤ int i = 10; ¤ o = i;
¤ String s = “hola”; ¤ o = s;
¤ Integer enter = i; // Integer enter = new Integer(i); ¤ o = enter;
Excepcions
Excepcions
¤ Separació entre codi i gestió d’errors
¤ Propagació
¤ Diferenciació dels diferents tipus d’errors.
¤ Java tutorial: ¤ Excepcions:
http://docs.oracle.com/javase/tutorial/essential/exceptions/index.html
final
¤ Classe ¤ no permet herència
¤ Mètodes ¤ No es poden sobreescriure
¤ Variables ¤ Només es poden inicialitzar una vegada
Classes abstractes
¤ No en podem crear objectes
¤ Pot tenir mètodes abstractes, no implementats.
¤ Es poden declarar variables no estàtiques, no finals i mètodes no abstractes.
¤ Tutorial ¤ http://docs.oracle.com/javase/tutorial/java/IandI/
abstract.html
Interfícies
¤ In object-oriented programming, an interface is a common means for unrelated objects to communicate with each other. These are definitions of methods and values which the objects agree upon in order to cooperate.
¤ Col·lecció de mètodes abstractes ¤ Obligar que diferents classes utilitzin els mateixos mètodes
¤ Relacionar classes (multiherència?)
¤ Tutorial: http://docs.oracle.com/javase/tutorial/java/concepts/interface.html
final
¤ Variable ¤ Una vegada inicialitzada el seu contingut no es pot
modificar
¤ Mètode ¤ Un mètode final no es pot sobreescriure
¤ Classe ¤ Una classe final no permet crear classes filles
¤ Java Tutorial ¤ http://docs.oracle.com/javase/tutorial/java/IandI/final.html
java.io
¤ InputStream ¤ Entrada
¤ FileInputStream, PipedInputStream, ByteArrayInputStream, StringBufferInputStream
¤ OutputStream ¤ Sortida
¤ FileOutputStream, PipedOutputStream, ByteArrayOutputStream
¤ Java Tutorial ¤ http://docs.oracle.com/javase/tutorial/essential/io/index.html
java.io
¤ FilterInputStream ¤ DataInputStream, BufferedInputStream, LineNumberStream,
ObjectInputStream
¤ FilterOutputStream ¤ DataOutputStream, BufferedOutputStream, PrintStream,
ObjectOutputStream
Fitxers de text: Lectura
//Obrim fitxer per poder llegir caracters FileInputStream lectura = new FileInputStream(“nomfitxer.txt”); //Convertim el fitxer a una classe per poder llegir Strings BufferedReader lecturaString = new BufferedReader(lectura); //Llegim tots els caracters fins arribar al primer intro String linia = lecturaString.getLine(); ... //Tancam el fitxer lecturaString.close();
Fitxers de text: Escriptura
//Obrim fitxer per poder escriure caracters FileOutputStream escriptura= new FileOutputStream (“nomfitxer.txt”); //Convertim el fitxer a una classe per poder escriure Strings PrintStream escripturaString = new PrintStream (escriptura); //Escrivim un String escripturaString.println(“Escrivim”); ... //Tancam el fitxer escripturaString.close ();
Fitxers de Binaris: Lectura
//Obrim fitxer per poder llegir caracters FileInputStream lectura = new FileInputStream(“nomfitxer.txt”); //Convertim el fitxer a una classe per poder llegir Object ObjectInputStream ois= new ObjectInputStream (lectura); //Llegim objects Object o = ois.readObject(); //Object ha de ser Serializable //Repassar exemple campus extens per veure com tractar el Final //De fitxer //Tancam el fitxer ois.close();
Fitxers Binaris: Escriptura
//Obrim fitxer per poder escriure caracters FileOutputStream escriptura= new FileOutputStream (“nomfitxer.txt”); //Convertim el fitxer a una classe per poder escriure Objectes ObjectOutputStream oos= new ObjectOutputStream (escriptura); //Escrivim un Object oos.writeObject(new Object()); //Object ha de ser Serializable ... //Tancam el fitxer oos.close ();
Enumeracions
¤ Un enumeració és un tipus de dades especial que permet assignar a una variable un conjunt de constants predefinides.
¤ public enum Dia{dl,dm,dc,dj.dv,ds,dg}
¤ Dia d = Dia.dl;
¤ if(d== Dia.dc) ...
¤ Tutorial de Java ¤ http://docs.oracle.com/javase/tutorial/java/javaOO/
enum.html
+ Conceptes POO
¤ Visibilitat: http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html
¤ Polimorfisme: http://docs.oracle.com/javase/tutorial/java/IandI/polymorphism.html
¤ Sobreescriptura: http://docs.oracle.com/javase/tutorial/java/IandI/override.html
+Conceptes POO
¤ Abstract: http://docs.oracle.com/javase/tutorial/java/IandI/abstract.html
¤ Excepcions
¤ http://docs.oracle.com/javase/tutorial/essential/exceptions/index.html
¤ Interfícies ¤ http://docs.oracle.com/javase/tutorial/java/concepts/interface.html
¤ API Java ¤ http://docs.oracle.com/javase/7/docs/api/
¤ I/O ¤ http://docs.oracle.com/javase/tutorial/essential/io/index.html