tema 1- poo

31
Tema 1 POO 22354 - Programació Avançada Antoni Jaume i Capó

Upload: alexander-nolasco

Post on 07-Dec-2015

230 views

Category:

Documents


1 download

DESCRIPTION

uib

TRANSCRIPT

Page 1: Tema 1- POO

Tema 1 POO 22354 - Programació Avançada

Antoni Jaume i Capó

Page 2: Tema 1- POO

Naming convention

¤  http://www.oracle.com/technetwork/java/javase/documentation/codeconventions-135099.html#367

Page 3: Tema 1- POO

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ò.

Page 4: Tema 1- POO

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.

Page 5: Tema 1- POO

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!

Page 6: Tema 1- POO

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).

Page 7: Tema 1- POO

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

Page 8: Tema 1- POO

Encapsulació

¤  Entitat formada pel comportament (mètodes) i les dades (membres).

¤  Forma una entitat, una unitat.

Page 9: Tema 1- POO

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

Page 10: Tema 1- POO

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

Page 11: Tema 1- POO

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

Page 12: Tema 1- POO

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.

Page 13: Tema 1- POO

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{}.

Page 14: Tema 1- POO

Important

¤  Abstracció

¤  Encapsulació

¤  Herència

¤  Java Tutorial: ¤  http://docs.oracle.com/javase/tutorial/java/concepts/

index.html

Page 15: Tema 1- POO

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

Page 16: Tema 1- POO

Wrappers

¤  Object o;

¤  int i = 10; ¤  o = i;

¤  String s = “hola”; ¤  o = s;

¤  Integer enter = i; // Integer enter = new Integer(i); ¤  o = enter;

Page 17: Tema 1- POO

Excepcions

Page 18: Tema 1- POO

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

Page 19: Tema 1- POO

final

¤  Classe ¤  no permet herència

¤  Mètodes ¤  No es poden sobreescriure

¤  Variables ¤  Només es poden inicialitzar una vegada

Page 20: Tema 1- POO

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

Page 21: Tema 1- POO

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

Page 22: Tema 1- POO

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

Page 23: Tema 1- POO

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

Page 24: Tema 1- POO

java.io

¤  FilterInputStream ¤  DataInputStream, BufferedInputStream, LineNumberStream,

ObjectInputStream

¤  FilterOutputStream ¤  DataOutputStream, BufferedOutputStream, PrintStream,

ObjectOutputStream

Page 25: Tema 1- POO

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();

Page 26: Tema 1- POO

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 ();

Page 27: Tema 1- POO

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();

Page 28: Tema 1- POO

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 ();

Page 29: Tema 1- POO

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

Page 30: Tema 1- POO

+ 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

Page 31: Tema 1- POO

+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