©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 4 - 1 Capítulo 4 Definiendo sus Propias Clases Parte.

1 ©The McGraw-Hill Companies, Inc. Permission required fo...
Author: Andrés Suárez Salas
0 downloads 0 Views

1 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 4 - 1 Capítulo 4 Definiendo sus Propias Clases Parte 1

2 Objetivos Definir una clase con varios métodos y miembros de datos Diferenciar variables locales y de instancia Definir y usar métodos que devuelven valores Distinguir métodos público de privados Distinguir datos miembros públicos de privados Pasaje de datos primitivos y de objetos a métodos

3 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 4 - 3 ¿Por qué programar clases? El uso de las clases pre-existentes no satisfacen todas las necesidades. Se necesita poder definir clases propias para crear aplicaciones Se debe aprender a definir clases para luego poder construir aplicaciones Las clases que definimos se llaman clases definidas por el programador

4 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 4 - 4 1er Ej: Usando la clase Bicycle class BicycleRegistration { public static void main(String[] args) { Bicycle bike1, bike2; String owner1, owner2; bike1 = new Bicycle( ); //Crea y asigna valores a bike1 bike1.setOwnerName("Adam Smith"); bike2 = new Bicycle( ); bike2.setOwnerName("Ben Jones"); owner1 = bike1.getOwnerName( ); //Obtiene información owner2 = bike2.getOwnerName( ); System.out.println(owner1 + " owns a bicycle."); System.out.println(owner2 + " also owns a bicycle."); }

5 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 4 - 5 La definición de la clase Bicycle class Bicycle { // Datos Miembro private String ownerName; //Constructor: Inicializa a los datos miembros public Bicycle( ) { ownerName = "Unknown"; } //Devuelve el nombre del propietario de esta bici public String getOwnerName( ) { return ownerName; } //Asigna el nombre al propietario de esa bici public void setOwnerName(String name) { ownerName = name; }

6 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 4 - 6 Múltiples Instancias Una vez que se ha definido la clase Bicycle, podemos crear múltiples instancias. Bicycle bike1, bike2; bike1 = new Bicycle( ); bike1.setOwnerName("Adam Smith"); bike2 = new Bicycle( ); bike2.setOwnerName("Ben Jones");

7 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 4 - 7 Estructura del programa y archivo fuente BicycleRegistrationBicycle Hay dos archivos fuente. Cada definición de clase se almacena en un archivo separado BicycleRegistration.javaBicycle.java Para correr el programa: 1. javac Bicycle.java (compile) 2. javac BicycleRegistration.java (compile) 3. java BicycleRegistration (run)

8 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 4 - 8 Diagrama de Clases para Bicycle Listado de métodos Listamos el nombre y el tipo de datos de los argumentos pasados al método Listado de métodos Listamos el nombre y el tipo de datos de los argumentos pasados al método Bicycle setOwnerName(String) Bicycle( ) getOwnerName( )

9 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 4 - 9 Plantilla para definición de clases class { } Sentencias Import Comentario de la Clase Declaración de la Clase Datos Miembros Métodos (incl. Constructor) Métodos (incl. Constructor)

10 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 4 - 10 Declaración de los miembros de Datos ; private String ownerName ; Modifiers Data Type Name Nota: Hay un sólo modifcador en este ej.

11 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 4 - 11 Declaración de Métodos ( ){ } public void setOwnerName ( String name ) { ownerName = name; } Sentencias Modifier Return Type Method Name Parameter

12 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 4 - 12 Constructor Un constructor es un método especial que se ejecuta cuando se crea una nueva instancia de la clase. public ( ){ } public Bicycle ( ) { ownerName = “ Unassigned ” ; } Statements Modifier Class Name Parameter

13 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 4 - 13 2do Ej: Usando Bicycle y Account class SecondMain { //Usa objetos de distintas clases programadas public static void main(String[] args) { Bicycle bike; Account acct; String myName = "Jon Java"; bike = new Bicycle( ); bike.setOwnerName(myName); acct = new Account( ); acct.setOwnerName(myName); acct.setInitialBalance(250.00); acct.add(25.00); acct.deduct(50); System.out.println(bike.getOwnerName() + " owns a bicycle and"); System.out.println("has $ " + acct.getCurrentBalance() + " left in the bank"); }

14 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 4 - 14 La clase Account class Account { private String ownerName; private double balance; public Account( ) { ownerName = "Unassigned"; balance = 0.0; } public void add(double amt) { balance = balance + amt; } public void deduct(double amt) { balance = balance - amt; } public double getCurrentBalance( ) { return balance; } public String getOwnerName( ) { return ownerName; } public void setInitialBalance (double bal) { balance = bal; } public void setOwnerName (String name) { ownerName = name; } Page 1Page 2

15 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 4 - 15 Estructura del programa de SecondMain SecondMainBicycle SecondMain.javaBicycle.java Para correr el programa: 1. javac Bicycle.java (compile) 2. javac Account.java (compile) 2. javac SecondMain.java (compile) 3. java SecondMain (run) Account.java Account Nota: las clases se compilan una vez, recompilar sólo si se ha modificado el código

16 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 4 - 16 Argumentos y Parámetros Argumento: es un valor que se le pasa a un método Parámetro: es dónde el método invocado recibe el valor del argumento pasado class Account {... public void add(double amt) { balance = balance + amt; }... } class Sample { public static void main(String[] arg) { Account acct = new Account();... acct.add(400);... }... } argument parameter

17 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 4 - 17 Mapeo de Argumentos y Parámetros El número de argumentos y parámetros debe ser igual Argumentos y parámetros son aparedos de izq a derecha El tipo del par mapeado debe ser compatibe (ej. No se puede pasar un arg de tipo double a un parámetro de tipo int)

18 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 4 - 18 Pasando Objectos a Métodos Asi cómo pasamos datos de tipo primitivo (int, double) a un método tambien podemos pasarle un objeto Cuando le pasamos un objeto, realmente le estamos pasando la referencia del objeto Esto significa que no se crea una copia del objeto al pasarlo a un método. Ambos el argumento y el parámetro se refieren al mismo objeto.

19 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 4 - 19 Pasando un objeto Student

20 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 4 - 20 Compartiendo un Objecto Pasamos el mismo objeto student a card1 y card2 Ya que realmente estamos pasando una referencia al mismo objeto, resulta que el dueño de los dos objetos LibraryCard apuntan al mismo objeto student

21 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 4 - 21 Información modificadores de visibilidad Los modificadores público y privado indican la accesibilidad tanto de los datos miembros como de los métodos Si el componente de una clase (miembro de dato o método) se declara privado los usuarios o clientes de la clase no pueden acceder a él. Si se declara público, si Los detalles internos de las clases se declaran privados quedando así ocultos para los clientes. Esto se llama ocultar información

22 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 4 - 22 Ej Accesibilidad class Service { public int memberOne; private int memberTwo; public void doOne() { … } private void doTwo() { … } … Service obj = new Service(); obj.memberOne = 10; obj.memberTwo = 20; obj.doOne(); obj.doTwo(); … ClientService

23 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 4 - 23 Miembros datos privados Miembros datos que implementan detalles de la clase deben ser invisibles a los clientes, declararlos como privados Excepción: Constantes deben ser declaradas públicas si es necesario que se usen directamente por un método externo. Ej PI, MESES_DEL_AÑO

24 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 4 - 24 Guía para los modificadores de Visibilidad –Declarar las variables de clase y de instancia privadas –Declarar los métodos de clase y de instancia privados si son usados sólo por otros métodos de la misma clase –Declarar las constantes de clase públicas si los clientes necesitan leer su valor. Si es para uso interno de la clase, declararlo privado

25 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 4 - 25 Diagrama de clases con notación de Visibilidad público – símbolo mas (+) privado – símbolo menos (-)

26 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 4 - 26 Constantes Recordemos que el uso de constantes: –Provee una descripción más significativa que un valor Ej number = UNDEFINED; es más significativo que number = -1; –Simplifica el mantenimiento de los programas. Sólo necesitamos cambiar el valor de la constante en su declaración, en vez de tener que localizar todas las ocurrencias de la misma en el código

27 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 4 - 27 Ej de uso de Constantes class Dice { private static final int MAX_NUMBER = 6; private static final int MIN_NUMBER = 1; private static final int NO_NUMBER = 0; private int number; public Dice( ) { number = NO_NUMBER; } //Tira el dado public void roll( ) { number = (int) (Math.floor(Math.random() * (MAX_NUMBER - MIN_NUMBER + 1)) + MIN_NUMBER); } //Devuelve el nro que salió public int getNumber( ) { return number; }

28 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 4 - 28 Variables Locales Las variables locales se declaran dentro del método y prestan servicios temporales, tales como almacenar valores de cálculo intermedios public double convert(int num) { double result; result = Math.sqrt(num * num); return result; } local variable

29 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 4 - 29 Local, Parámetro y Miembro Dato Un identificador que está dentro de un método puede ser: una variable local, un parámetro o un miembro dato Si tiene el mismo nombre que una declaración de variable local o que un parámetro, entonces se refiere a estos. Si coincide con la declaración de un dato miembro el identificador se refiere al dato miembro –Caso contrario hay un error pues no se asocia a ninguna declaración

30 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 4 - 30 Ej class MusicCD { private String artist; private String title; private String id; public MusicCD(String name1, String name2) { String ident; artist = name1; title = name2; ident = artist.substring(0,2) + "-" + title.substring(0,9); id = ident; }... }

31 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 4 - 31 Llamada a métodos de la misma clase Hasta ahora, hemos estado llamando un método de otra clase Se puede llamar a un método de una clase desde otro método de la misma clase. En este caso nos referimos al método sin la notación de punto

32 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 4 - 32 Modificar una clase para hacerla una Main Cualquier clase puede convertirse en una clase main Todo lo que debe hacerse es agregarle el método main class Bicycle { //definición de la clase como antes //Método main que ejemplifica el uso de la clase public static void main(String[] args) { Bicycle myBike; myBike = new Bicycle( ); myBike.setOwnerName("Jon Java"); System.out.println(myBike.getOwnerName() + "owns a bicycle"); }

33 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 4 - 33 Problema Enunciado Escribir un programa de préstamos que calcule los pagos mensuales y totales dados un monto, una tasa de interés anual y un período

34 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 4 - 34 Plan General Tareas: –Obtener tres valores de ingreso: loanAmount (cantidad), interestRate (tasa de interés) Y loanPeriod (período) –Calcular los pagos mensuales y el pago total –Mostrar los resultados

35 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 4 - 35 Clases necesarias LoanCalculator Loan JOptionPanePrintStream inputcomputationoutput

36 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 4 - 36 Desarrollo Pasos Se desarrollará este programa en 5 pasos: 1.Comenzamos con la clase main LoanCalculator. Definir una clase Loan temporaria 2.Implementar la rutina para el ingreso de los tres valores 3.Implementar la rutina para mostrar los resultados 4.Implementar la rutina de cálculo para obtener los valores de pago mensual y el pago total 5.Terminar el programa

37 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 4 - 37 Paso1 Diseño Los métodos para la clase LoanCalculator MétodoVisibilili dad Propósito startpublicComienza el cálculo del préstamo (loan) Llama a los otros métodos computePaymentprivateDados tres parámetros, calcular los pagos mensuales y el pago total describeProgramprivateMostrar un descripción corta del programa displayOutputprivateMostrar la salida getInputprivateDar los tres valores de ingreso

38 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 4 - 38 Fórmula pagos mensuales N MP = L x R / (1- (1/1+R)) MP Pagos mensuales L importe del préstamo R tasa de interés mensual (Ej 0.01  1% mensual) N nro de pagos

39 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 4 - 39 Paso 1 Código Directory: Chapter4/Step1 Source Files: LoanCalculator.java Loan.java Directory: Chapter4/Step1 Source Files: LoanCalculator.java Loan.java

40 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 4 - 40 Paso 1 Prueba En esta fase, correr el programa varias veces para verificar que da la sig salida inside describeProgram inside getInput inside computePayment inside displayOutput

41 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 4 - 41 Paso 2 Diseño Diseñar las rutinas de ingreso -LoanCalculator manejará la interacción con el usuario, pedir y obtener los tres valores a ingresar -LoanCalculator llama a setAmount, setRate y setPeriod de un objeto Loan

42 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 4 - 42 Paso 2 Código Directory: Chapter4/Step2 Source Files: LoanCalculator.java Loan.java Directory: Chapter4/Step2 Source Files: LoanCalculator.java Loan.java

43 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 4 - 43 Paso 2 Prueba Correr varias veces el programa con distintos valores de ingreso Verificar que los valores que se ingresan sean los mismos que se muestran System.out.println("Loan Amount: $" + loan.getAmount()); System.out.println("Annual Interest Rate:" + loan.getRate() + "%"); System.out.println("Loan Period (years):" + loan.getPeriod());

44 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 4 - 44 Paso 3 Diseño Implementaremos el método displayOutput

45 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 4 - 45 Paso 3 Código Directory: Chapter4/Step3 Source Files: LoanCalculator.java Loan.java Directory: Chapter4/Step3 Source Files: LoanCalculator.java Loan.java

46 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 4 - 46 Paso 3 Prueba Correr varias veces el programa con diferentes valores de ingreso, verificar el formato de salida Ajustar el formato para la salida

47 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 4 - 47 Paso 4 Diseño Dos métodos obtener pago mensual, obtener pago total se definieron para la clase Loan (getMonthlyPayment y getTotalPayment ) Vamos a implementarlos para que puedan trabajar de forma independiente uno de otro Esto sería un diseño pobre, el cliente debe llamar a método que obtiene el pago mensual antes de llamar al que implementa el pago total

48 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 4 - 48 Paso 4 Código Directory: Chapter4/Step4 Source Files: LoanCalculator.java Loan.java Directory: Chapter4/Step4 Source Files: LoanCalculator.java Loan.java

49 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 4 - 49 Paso 4 Prueba Correr el programa varias veces con diferentes lotes de datos y controlar los resultados

50 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 4 - 50 Paso 5: Terminar Implementar el métodos que describe lo que realiza el programa (describeProgram) Formatear los pagos mensuales y total a tres decimales, usando el método DecimalFormat. Directory: Chapter4/Step5 Source Files (final version): LoanCalculator.java Loan.java