Por qu orientacin al objeto v Una estrategia
¿Por qué orientación al objeto ? v Una estrategia para poder desarrollar programas más grandes, más libres de errores y en menos tiempo: Software engineering
Podemos pensar en otros objetos no existentes: el reloj Las variables son las posiciones de los punteros: segundero, minutero y horario v Los métodos son para poner los valores y preguntar “¿qué hora es? ” v Establecer valores de los punteros Preguntar la hora
El libro telefónico Las variables son listas de números y nombres v Los métodos son para registrar un nuevo par (nombre, número), preguntar el teléfono dado un nombre, cambiar un teléfono o borrar un par v • Poner nuevo par (nombre, número) • Cambiar el número dado un nombre • Borrar un par (nombre, número) • Dado un nombre preguntar el teléfono
El registro de un estudiante Las variables son los datos relevantes del estudiante (nombre, edad, dirección, etc. . ) v Los métodos son para establecer valores y recuperar estos datos v Poner valores Name: Sakano Tepe Address: Musashino-shi. Year Born: 1977 Recuperar valores
Clases y objetos v v Todo objeto es de una cierta clase La clase define el tipo de objeto, esto es: – Qué variables contiene – Qué métodos pueden ser aplicados a un objeto de esta clase Objecto A de clase clock Objecto B de clase clock Clase Clock Objecto C de clase clock
Diseño de los métodos (1) v Clock A = new Clock( ); Clock A; A = new Clock(); Crea un nuevo objeto Clock v A. set. Time(15, 35, 45); v int i = A. get. Hour( ); String s = A. get. Time() v Pone los valores en 15, 35 y 45 recupera el valor del puntero horario recupera un String con hh: mm: ss
Diseño de los métodos (2) v Phonebook B = new Phonebook( ); Crea un libro de teléfonos vacío v B. add. Entry(“Simón Vera”, 422596160); Simón Vera 422596160 v Dados nombre y número como parámetros crea un entry long l = B. get. Number(“Simón Vera” ); Simón Vera 422596160 Dado un nombre como parámetro recupera el número
Cómo se define una clase nueva v Definir una nueva clase básicamente significa – Definición de las variables que contendrá un objeto – Definición de los métodos que se le podrán aplicar a un objeto de esta clase v v La definición de una clase debe ir en un archivo llamado Classname. java Por convención, el nombre de las clases debe empezar con mayúscula • Console v String Clock Student Después de compilar el archivo con la clase podemos usarla al igual que hemos usado la clase Consola
La clase Clock • Un Clock tendrá tres variables (attributes, campos) int hours int minutes int seconds • Cada vez que se cree un nuevo objeto Clock sus tres variables valdrán 0 (medianoche) • El método set. Time() va a poner una nueva hora. Este método requerirá tres parámetros: hh, mm, ss • También tendremos 3 métodos que retornarán el valor de cada puntero (por ejemplo • El método get. Time() retorna un String con la hora en el formato hh: mm: ss
Escribamos el archivo Clock. java, compilémolos y usémolos en un programa Clock A = new Clock( ); A. set. Time(15, 30, 20); int h = A. get. Hour( ); int m = A. get. Minutes(); int s = A. get. Minutes(); String s = get. Time(); 15 hours 30 minutes 20 seconds Por convención, los nombres de variables y metodos empiezan minúscuas Clock. java Program. Clock 1 Program. Clock 2
Como usar clases definidas por el usuario La manera más simple es usar el archivo class en el mismo dirctorio donde se encuantra el programa que usa la clase (también se pueden usar paquetes o definir la variable CLASSPATH Java My. Class main(. . . new Another. Class() Another. Class
El registro de un estudiante Las variables: name, address, year. Born v Los métodos set. X(parámetro), get. X(), v Con X = Name, Address, Year Set data Name: Sakano Tepe Address: Musashino-shi. Year Born: 1977 Student. java retrieve data Program 9
El Phone Book Name Number Set(name, number) Matsumoto 11122233 Vera 3456789 Wakahara 2345678 . . Retrieve(name)
El Phone Book: Implementación 1 int[] numbers String[] names Jun Kenichiro Kamugisha int next Phonebook 0 1 2 3 4 5 6 program 45678 12345 55443 Maximum
El Phone Book: Implementación 2 (un arreglo de objetos) Entry[] entries Jun 45678 Kenichiro 12345 Kamugisha 55443 int next Cada elemento del arreglo es un objeto del tipo Entry Phonebook 2 0 1 2 3 4 5 6 Maximum
El Phone Book: Implementación (un vector de objetos) Vector entries Jun 123456 Sakano 223344 Juinichi 889997 Cada elemento del vector es un objeto del tipo Entry
El Objeto Vector v v v Está definido en el paquete java. util, por lo cual hay que importarlo Se pueden guardar objetos de cualquier clase Sólo ocupa el espacio que necesita para los objetos que realmente tiene Los objetos tienen una posición y se pueden “rescatar” Los métodos más importantes son: – – – add(objeto) agrega el objeto al final add(i, objeto) agrega el objeto en la posición dada element. At(i) retorna un puntero al elemento en la posicion remove. Element. At(i) elimina el elemento en la posición dada clear() elimina todos los elementos Phonebook 3
Un Ejemplo Grande v v El objeto University es un vector de objetos Student El objeto Student tiene un nombre, número de matrícula y un vector con objetos Mark Cada objeto Mark contiene un par código de curso-nota del alumno en el curso La información viene en un archivo de texto de la siguiente manera: – – v v v matrícula (10 caracteres) nombre (30 caracteres) código curso ( 5 caracteres) nota (3 caracteres) Primero el programa debe leer la información del archivo y generar con ella el objeto University correspondiente Luego de leer la información el programa debe generar un archivo con la lista de estudiantes y sus promedios Luego, por cada código de curso que se le ingrese debe producir un archivo con la lista de alumnos que lo tomaron
Un Ejemplo Grande codigo nota Matricula Nombre codigo nota marks codigo nota Student codigo nota Matricula Nombre codigo nota markscodigo nota Student nota Matricula Nombre codigo nota codigonota marks codigo Student Matricula Nombre codigo nota marks codigo Student codigo nota marks Student University
Otra class: el Vektor (o Punto) - Crear un Vektor - Retornar em módulo de un Vektor - Retornar parte-x o parte-y y - Sumar 2 Vektores - Restar 2 Vektores x Vektor. java Program. Vektor. java
La variable “this” en la definición de la clase public class My. Class { var a 1, a 2, a 3; public static void main(. . ) { My. Class mc = new My. Class() mc. method 1(); method 1() { this. a, this. b, this. c } } }
La variable a un object es un puntero Console c, b; c = new Console(); b = c; c b Tenemos dos punteros apuntando a nada todavía. Tienen el valor null y causará Invocar un método sobre esta variable Ahora tenemos dos variables apuntando Al mismo objeto objecto. Si invocamos Cualquier método sobre cualquiera de las Variables, ambas notarán el cambio
Resumamos: Escritura de clases Esto implica que esta clase será conocida fuera del archivo también. Nombre de clases empiezan Por convención con mayúsculas public class Classname { declaration of variables write contructor method(s) write other methods } Se pueden definir más clases en un mismo archivo pero una de ellas Puede ser pública solamente ! (y es la que le da el nombre al archivo)
Cómo escribir métodos dinámicos Type of value the method will return (void in case it does not return any value) Public, private, protected or static Name of the method (given by the programmer) public int get. Hours( ) { return hours; } The instructions should be written within the brackets {} Parameters of the method (none in this case)
Escritura de constructores Nombre del método es El de la clase Parámetros que recibirá el Constructor para crear el nuevo Objeto (inicialización) Clock 2 ( int h, int m, int s, int D, int M ) {. . . } No se necesita escribir nada aqui Se puede escribir más de un constructor Clock 2 ( ) {. . . } Este constructor pondrá valores default en el objeto
Extendiendo un clase: Herencia v Una de las características más poderosas que tiene la orientación a objeto es la posibilidad de extender una clase, incluso si la implemnetación de esta no se conoce Class 1 Class 2 Original Class Super-clase de la clase extendida Un objeto de Class 2 es Original Class Extended Class También de Definición de nuevas variables y métodos Clase Class 1
Extendamos laclase Clock Vamos a ponerle más información a un objeto de clase Clok Le pondremos las variables day y month y los métodos Para manejarlas. public class Clock 2 extends Clock { declare otras variables (day y month) declare otros metodos } Clock 2. java dos
Extendiendo la clase Console Como dijimos, incluso si no sabemos cómo fue programada La superclase podemos usarla para extenderla, ya que para Esto se usa el archivo class. Por ejemplo, podemos extender la consola para incluir los métodos read. Array(int n) y a read. Student() public class Console 2 extends Console { public } Console 2. java program
La clase Object • Existe una clase minimal llamada “Object” • Todas las clases en java son extensiones de ella • Incluso si no se escribe explícitamente, las clases definidas por el usuario también son extensiones de ella • Esto implica que cualquier objeto en un programa java será de la clase Object Clock String Clock 2 Others Console 2
Extendiendo la clase Student • Vamos a incorporar las notas • Como cada alumno puede recibir un n úmero variable de notas, vamos a usar un arreglo de largo variable • Vectores no son parte del core del lenguaje java, por lo que hay que importar el paquete java. utility • The instruction for doing this is import java. util. Vector; or import java. util. *; • Some of the methods of this class are • void add(Object) • Object element. At() Waseda. Student • int size() Program 10
Public, private, protected • Los métodos y las variables en una clase se pueden clasificar como public, private, y protected • Un método o variable public puede ser accesada desde cualquier programa que tenga acceso a la clase. • Esto significa que en el caso de lariable declaradas public, un programa externo puede modificar el valor de estas variables public class Student { public String name; public String address; public int year. Born; . . . Student s 1 = new Student(); s 1. name = “Nelson Baloian”;
Private & protected Un método o variable clasificada como private puede ser usada sólo por métodos escritos dentro de la clase. Una variable o método protected puede ser accesada desde desntro de la clase y desde una clase extendida Cuando no hay ningún clasificador significa que el método o variable son accesibles desde dentro del paquete (package, serán vistos más adelante con detalle)
Private, protected, public Public: conocido por cialquiera que conozca la clase Protected: conocido también por la extendida Private: sólo conocido por la clase
Variables Estáticas (static) • Una variable declarada como static significa que habrá una sola para toda la clase (contrariamente a las dinámicas, de las cuales tiene cada objeto una copia) • Ejemplo: queremos llevar la cuanta de cuántos estudiantes han sido creados public class Waseda. Student 2 extends Waseda. Student { public static int nstudents = 0; Waseda. Student 2(String x, String y, int z, int n) { super(x, y, z); marks = new int[n]; nmarks = 0; nstudents = nstudents +1; } }
Static Variables nstudents Waseda. Student 2. class marks name etc ws 21 Marks name etc ws 22 marks name etc ws 23
Static Methods Static methods are applied to a classname nstudents n. Students() put. New. Mark() Dynamic methods are applied to an object show. Average() marks name etc
Polymorphism v Muchas veces es necesario que un Objeto de una cierta clase sea considerado como también perteneciente a otra al mismo tiempo v Un objeto puede verse como perteneciente a la clase final definida para él y además como perteneciente a todas las superclases de la jerarquía hasta Object v Este es el primer mecanismo de polimorfismo v Pero las clases en Java solo pueden extender una superclase. Muchas veces sucede que objetos de clases que ya han extendido una clase puedan ser vistos como pertenecientes a otra clase también v Esto puede lograrse usando interfaces v Veamos ejemplos de ambos casos
Ejemplo con Herencia Object Graphic. Object Rectangle. Object Circle. Object Graphic. Test. java
Métodos para dibujar en la consola v v draw. Line(x 1, y 1, x 2, y 2) draw. Rect(x, y, w, h) x 1, y 1 x, y x 2, y 2 w h v fill. Rect(x, y, w, h) w v draw. Oval(x, y, w, h) v fill. Oval(x, y, w, h) x, y h
Métodos para dibujar en la Consola v v x[0], y[0] draw. Polygon(x[], y[], n) fill. Polygon(x[], y[], n) x[1], y[1] x[4], y[4] n=5 v x[3], y[3] set. Color(colorname) colorname = black, blue, cyan, dark. Gray, gray, orange, white, red, pink, yellow v set. Color(new color(red, green, blue)) x[2], y[2]
Dibujando Strings y cambiando el tamaño y el Font draw. String(str, x, y) x v We can change the standard Font by creating a new one v This is the string y Font afont = new font(“Arial”, font. Bold, 20) c. set. Font(afont); Estos métodos son los mismos que usa Java para dibujar componentes nativas (JFrame, Jcanvas, etc. . . )
Interfaces Vektor Visual. Vektor Clock Visual. Clock INTERFACE: Graphic. Object. Interface Graphic. Test. Interface. java
- Slides: 42