qué es orientación a objeto ? los datos que usan los programas son objetos los objetos son una...

Post on 23-Jan-2016

229 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Qué es Orientación a Objeto ?• Los datos que usan los programas son objetos • Los objetos son una colección de variables y

métodos para manipularlas

Métodos que modifican variables

Método que retorna valores dependiendo del estado de las variables

Ejemplos de “Objetos” • Un reloj: las variables representan dónde

están los punteros

• A telephone book: the variables are a list of names and telephone numbers

Poner la hora

¿Qué hora es?

• Set a name with a telephone number• change the telephone number• delete a pair name-telephone

• Given a name ask the telephone number

Clases y Objetos • Todo objeto es de una clase dada

• La clase define el tipo de objeto– variables que contiene un objeto de esta clase– qué métodos se pueden aplicar a un objeto de esta clase

Clase Clock

Objeto A de clase Clock

Objeto B de clase Clock

Objeto B de clase Clock

Ejemplo de uso de Objetos• Clock A = new Clock( );

• A.setNewTime(3,35);

• int i;

• i = A.getHour( );

Put pointers in 3 and 35

Get the value of the hour-pointer

• PhoneBook B = new PhoneBook( );

• B.addEntry(“Simon”,422596160);

• B.getNumber(“Eduardo Vera” );

Agrega un par

Recupera el telefono

Crea un nuevo PhoneBook

Eduardo Vera422596160

Eduardo Vera

422596160

¿ Por qué Object Orientation ?• Es simplemente una estrategia para

desarrollar programas grandes en forma más ordenada de manera de ir construyendo jerárquicamente objetos más complejos

Programar en JAVA Significa escribir clases

• Qué componente (atributos) tendrá un objeto de esta clase

• Cómo se crean nuevos objetos (constructor) • Qué métodos puedo aplicar sobre un objeto de

esta clase• Es la nueva clase una extensión de la que había• Cómo voy a echar a andar el programa (main)

La Clase String• Son parte del lenguaje

• Se crean: String s = new String(Hola Mundo”); pero esto se puede resumir con String s = “Hola Mundo”;

• Tamaño de un String: int i = s.length(); • k-esimo carácter: char c = s.charAt(k); • Subsecuencias: String sub = s.substring(k);

String sub = s.substring(inicio, fin);• Búsqueda de subsecuencias: int i = s.indexOf(“hola”); • Comparacion: boolean iguales s1.equals(s2);

int i = s1.compareTo(s2);

0 si s1==s2, >0 si s1>s2, <0 si s1<s2

Búsqueda de SubstringsString s = “llego y dijo hola”;

int i = s.indexOf(“go”)´; i == 3 (parten de 0)

Ej: Contar las apariciones de “hola” en un string s:public class Cuenta { public static void main(String args[]) {

int i , apariciones = 0;while ((i = s.indexOf(“hola”)) !0 -1) {

++apariciones;s = s.substring(i+1);

}System.out.println(“el string hola aparecio “+

apariciones+ “veces”); }}

Un objeto de la clase clock tendrá 3 componentes (atributos, variables)

hours minutes seconds

Cada vez que un nuevo objeto Clock es creado el valor de los atributos se pone en cero (the hour will be midnight)

Existirá un método para poner una hora nueva. Este método “recibe” el valor nuevo para la hora, los minutos y los segundos

también habrán 3 métodos que “devoverán” los valores actuales de cada componente

Clases definidas por el usuario: La clase Clock

Escribir el archivo Clock.java, compilarlo y usarlo en un programa

Clock A = new Clock( );A.setTime(15,30,20);int h = A.getHour( ); int m = A.getMinutes(); int s = A.getMinutes();

hoursminutesseconds

15

2030

Clock.java ProgramClock1

Como se usan las clases definidas por el usuario

El archivo con la clase definida debe ser compilado El archivo con la clase (resultado) debe estar en el mismo directorio que contiene el programaTambién puede ponerse el método main DENTRO de la definición de la clase.

Java MyClass

MyClass

new AnotherClass()

main(...

AnotherClass

El registro de un estudiante

• Las variables son los datos del estudiante (name, age, grades, etc..)

• Métodos para setear y recuperar estos datos

Name: Sakano Tepe

Address: Musashino-shi.

Year Born: 1977

Set data

retrieve data

Student.java Program9

The Phone Book

.... .....

2345678Clington

3456789Vera

11122233Matsumoto

NumberNameSet(name,number)Change(name,number)

Retrieve(name)

Extendiendo la clase Clock

Vamos a añadir más información a la clase Clock. Vamos a poner las variables day y month y añadiremos los métodos necesarios para setear y recuperar estos valores.Si queremos mantener la clase Clock entonces podemos copiar todo el código en otro archivo (Clock2). Una forma máscómoda es hacer la segunda una extesión de la primera.

public class Clock2 extends Clock {declare otras variables (day y month)declare otros métodos

}

Clock2.java ProgramClock2.java

Extendiendo una clase existente: Herencia

• Una de las características más poderosas de un lenguaje orientado a objeto es la posibilidad de extender una clase existente, incluso cuando no se cuenta con el código fuente. Esto se conoce como Herencia: la nueva clase hereda los atributos y métodos de la antigua

Original Class

Original Class

Definition of new variables and methods

Extended Class

Super-class of the extended class

Extendiendo la clase Studentpublic class WasedaStudent extends Student{ int[] marks; int nmarks;

WasedaStudent(String x, String y, int z, int n) {super(x,y,z); // a call to the constructor of the superclassmarks = new int[n]; nmarks = 0;

}

public void putNewMark(int x) {marks[nmarks] = x;

nmarks = nmarks +1; }

public double showAverage() { double sum = 0.0; int i; for(i=0; i < nmarks; i=i+1)

sum = sum + marks[i]; return sum/nmarks; }}

Usando la clase extendida

public class Program10 { public static void main(String args[]) { WasedaStudent ws1,ws2; ws1 =new WasedaStudent(“student1”,”Musashino-shi”,1980,5); ws2 =new WasedaStudent(“student2”,”Shinjuku-ku”,1981,7); ws1.putNewMark(10); ws1.putNewMark(5); ws1.putNewMark(4); ws2.putNewMark(5); ws2.putNewMark(8); ws2.putNewMark(7);ws2.putNewMark(4); System.out.println(ws1.showAverage()); System.out.println(ws2.showAverage()); ws1.show(); ws2.show(); }} Note that we can use all the methods of the superclass

Resumen: Escribiendo clases

public class Classname {declaration of variableswrite contructor method(s)write other methods

}

Esto significa que la clase será conocida fuera del archivo

Nombres de clases empiezanpor convención con mayúsculas

Cómo escribir métodos

public int getHours( ) {

return hours;

}

Public, private,protected or static

Type of value the method will return (void in case it does not return any value)

Parameters of the method (none in this case)

Name of the method(given by the programmer)

The instructions should bewritten within the brackets {}

Cómo escribir constructores

Clock2 ( int h, int m, int s, int D, int M ) { . . .

}

No se necesita escribir nada aquí

Parametros que recibirá elconstructor para construir el nuevo objeto

El nombre del método es el mismo que el de la clase

Podemos escribir más de un constructorClock2 ( ) { . . . }

Este constructor pondría valores por omisión (default)

public, private, protected y staticLos métodos y variables en una clase pueden ser clasificados como static private private protected y staticUn método o variable public puede ser accesada por cualquier programa que esté usando un objeto de esa clase. Para el caso de variables públicas, se pueden referir y modificar directamente :

public class Student { public String name; public String address; public int yearBorn; ......

Student s1 = new Student();s1.name = “Nelson Baloian”;

Private & protectedUn método o variable private puede ser accesada sólo por los métodos que están escritos dentro del archivo. Incluso si una clase es derivada de otra que contiene una variable o método privado estas no pueden ser referidas. Un método o variable protected puede ser accesada por los métodos escritos en una clase extendida. Cuando no se pone nada frente a una variable o método se asume package (casi protected)

Private, protected, public

Private: only known inside the file of the class

Protected: known also to extended classes

Public: known to anyone who knwos the class

Variables estáticasA static variable means that there is only one variable for the whole class (contrary to the dynamic variables, from which each object has an own instance of it)Example: we want to count how many students we have created:

public class WasedaStudent extends Student { int[ ] marks; int nmarks; static int nstudents = 0; WasedaStudent(String x, String y, int z, int n) {

super(x,y,z);marks = new int[n]; nmarks = 0;

nstudents = nstudents +1; }

Variables estáticas

nstudentsmarks []nmarksnameetc

marks []nmarksnameetc

marks []nmarksnameetc

marks []nmarksnameetc

Métodos EstáticosA static method means that the method will be applied to no object. It is applied to the class.

public static int nStudents() {return nstudents ;

}

The program using it shoud write: int = WasedaStudent.nStudents();

The Math class from the language has many static methods implemented:

Math.sqr(x), Math.sin(x), Math.max(x,y), Math.pow(x,y)

What is the meaning of public static void main(...) ?

Métodos Estáticos

nStudents()

nstudents

putNewMark()

showAverage()

marks []nmarksnameetc

Dynamic methods

top related