Qué es Orientación a Objeto ? Los datos que usan los programas son objetos Los objetos son una...
-
Upload
angeles-segura-poblete -
Category
Documents
-
view
226 -
download
0
Transcript of Qué es Orientación a Objeto ? Los datos que usan los programas son objetos Los objetos son una...
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