49
Introducción a la Programación Orientada a Objetos Los sistemas de software actuales suelen resolver problemas complejos que requieren soluciones dinámicas y capaces de adaptarse a situaciones imprevisibles. El desarrollo de estos sistemas de software es un proceso que abarca distintas etapas y requiere la participación de un equipo de profesionales con diferentes capacidades y roles. Una de las alternativas más populares y simples para organizar El Proceso de desarrollo de software

Introducción a la Programación Orientada a Objetos Los sistemas de software actuales suelen resolver problemas complejos que requieren soluciones dinámicas

Embed Size (px)

Citation preview

Page 1: Introducción a la Programación Orientada a Objetos Los sistemas de software actuales suelen resolver problemas complejos que requieren soluciones dinámicas

Introducción a la Programación Orientada a Objetos

Los sistemas de software actuales suelen resolver problemas complejos que requieren soluciones dinámicas y capaces de adaptarse a situaciones imprevisibles.

El desarrollo de estos sistemas de software es un proceso que abarca distintas etapas y requiere la participación de un equipo de profesionales con diferentes capacidades y roles.Una de las alternativas más populares y simples para organizar las etapas del proceso es la estructura en cascada.

El Proceso de desarrollo de software

Page 2: Introducción a la Programación Orientada a Objetos Los sistemas de software actuales suelen resolver problemas complejos que requieren soluciones dinámicas

Estudio de Factibilidad

Desarrollo de Requerimientos

Análisis y Diseño del Sistema

Implementación

Verificación

Mantenimiento

DOCUMENTACION

Introducción a la Programación Orientada a Objetos

El Proceso de desarrollo de software

Page 3: Introducción a la Programación Orientada a Objetos Los sistemas de software actuales suelen resolver problemas complejos que requieren soluciones dinámicas

Introducción a la Programación Orientada a Objetos

El producto final de este proceso es un sistema de software documentado que cumple con ciertos criterios de calidad.

En los problemas de mediana y gran escala este proceso requiere de creatividad, capacidad de abstracción y también de un paradigma que guíe, oriente y sistematice las actividades en cada etapa.

Con frecuencia una parte del desarrollo consiste en adaptar un sistema existente a nuevos requerimientos. El paradigma debe facilitar los cambios.

El Proceso de desarrollo de software

svr
En las aplicaciones de mediana y gran escala con frecuencia hay varias alternativas de diseñoLa implementación es en cambio menos creativa, consiste en general código que pueda ser ejecutado por la computadora. Puede haber varios algoritmos alternativos para cada servicio
Page 4: Introducción a la Programación Orientada a Objetos Los sistemas de software actuales suelen resolver problemas complejos que requieren soluciones dinámicas

Introducción a la Programación Orientada a Objetos

Un paradigma de programación brinda:

• Un principio que describe propiedades generales que se aplican a todo el proceso de desarrollo

• Una metodología que consta de un conjunto integrado de métodos, estrategias y técnicas

• Un conjunto de herramientas en particular lenguajes de modelado y lenguajes de programación

Paradigmas de Programación

Page 5: Introducción a la Programación Orientada a Objetos Los sistemas de software actuales suelen resolver problemas complejos que requieren soluciones dinámicas

El concepto de Objeto

El término objeto se utiliza para referirse a dos conceptos relacionados pero diferentes.

En un problema a resolver podemos identificar los objetos o entidades relevantes.

Durante la ejecución del programa que modela el problema se crean objetos de software.

Cada objeto relevante del problema está asociado a un objeto de software que lo representa en ejecución.

Page 6: Introducción a la Programación Orientada a Objetos Los sistemas de software actuales suelen resolver problemas complejos que requieren soluciones dinámicas

El ajedrez es un juego de mesa para dos personas. Es uno de los juegos más populares del mundo. Se considera no sólo un juego, sino un arte, una ciencia y un deporte mental.

Cada bando posee 16 piezas, con diferentes capacidades de movimiento, que se mueven en un tablero cuadrado de 8×8 casillas, alternativamente claras y oscuras.

Las piezas de cada jugador al principio de la partida son un rey, una dama o reina, dos alfiles, dos caballos, dos torres y ocho peones.

Introducción a la Programación Orientada a Objetos

Desarrollo de Requerimientos

Page 8: Introducción a la Programación Orientada a Objetos Los sistemas de software actuales suelen resolver problemas complejos que requieren soluciones dinámicas

Los objetos se agrupan en clases de acuerdo a atributos y comportamiento compartido

En resultado de esta etapa es un conjunto de diagramas elaborados usando un lenguaje de modelado.

Entre ellos un diagrama de clases que especifica la colección de clases y sus relaciones.

Introducción a la Programación Orientada a Objetos

Tablero PeonPieza

Diseño Orientado a Objetos

Page 9: Introducción a la Programación Orientada a Objetos Los sistemas de software actuales suelen resolver problemas complejos que requieren soluciones dinámicas

Cada clase modelada en el diagrama de clases se implementa en una clase.

Durante la implementación una clase es un módulo de código.

Introducción a la Programación Orientada a Objetos

class Tablero {

}

class Pieza {

}

class Peon extends Pieza {

}

La implementación de cada servicio puede constituir en sí mismo un problema y demandar el diseño de un algoritmo que lo resuelva.

La implementación

Page 10: Introducción a la Programación Orientada a Objetos Los sistemas de software actuales suelen resolver problemas complejos que requieren soluciones dinámicas

La verificación consiste en probar que cada servicio brinda la funcionalidad adecuada, cada clase cumple con sus responsabilidades y que la colección de clases en conjunto satisfacen los requerimientos.

Si la clase Tablero usa los servicios provistos por la clase Peon, verificaremos cada servicio de la clase Peon y luego los servicios de la clase Tablero.

Introducción a la Programación Orientada a Objetos

La verificación

Page 11: Introducción a la Programación Orientada a Objetos Los sistemas de software actuales suelen resolver problemas complejos que requieren soluciones dinámicas

Introducción a la Programación Orientada a Objetos

Objetos del problema Objetos de Software

abstracción

El modelo computacional es un mundo poblado de objetos comunicándose a través de mensajes.

Por ejemplo un objeto de clase Jugador puede enviar un mensaje al objeto de clase Tablero, quien a su vez envía un mensaje a un objeto de clase Peon.

El modelo computacional

Page 12: Introducción a la Programación Orientada a Objetos Los sistemas de software actuales suelen resolver problemas complejos que requieren soluciones dinámicas

Caso de Estudio: Caja de Ahorro

Un banco ofrece cajeros automáticos a través de los cuales los clientes pueden realizar depósitos, extracciones y consultar el saldo de su caja de ahorro. En el momento que se crea una Caja de Ahorro se establece su código y el saldo es 0. También es posible crear una cuenta estableciendo su código y saldo inicial. El código no se modifica, el saldo cambia con cada depósito o extracción. Se requiere que el monto sea siempre positivo.

Especificación de Requerimientos

Page 13: Introducción a la Programación Orientada a Objetos Los sistemas de software actuales suelen resolver problemas complejos que requieren soluciones dinámicas

Caso de Estudio: Caja de Ahorro

CajaAhorro<<atributos de instancia>>codigo:enterosaldo:real

Diagrama de clase: Atributos

El diagrama de clase se construye en la etapa de diseño.

Page 14: Introducción a la Programación Orientada a Objetos Los sistemas de software actuales suelen resolver problemas complejos que requieren soluciones dinámicas

Caso de Estudio: Caja de Ahorro

CajaAhorro<<atributos de instancia>>codigo:enterosaldo:real<<constructores>>CajaAhorro(c:entero)CajaAhorro(c:entero,s:float)

Diagrama de clase: Constructores

Requiere c y s > 0

Page 15: Introducción a la Programación Orientada a Objetos Los sistemas de software actuales suelen resolver problemas complejos que requieren soluciones dinámicas

Caso de Estudio: Caja de Ahorro

CajaAhorro<<atributos de instancia>>codigo:enterosaldo:real<<comandos>> depositar(mto:real)extraer(mto:real):boolean

Diagrama de clase: Comandos

Si mto > saldo retorna false y la extracción no se realiza

El comando depositar incrementa el valor del saldo de acuerdo al parámetro mto.

El comando extraer evalúa si es posible extraer el mto de acuerdo al saldo de la cuenta.

Page 16: Introducción a la Programación Orientada a Objetos Los sistemas de software actuales suelen resolver problemas complejos que requieren soluciones dinámicas

Caso de Estudio: Caja de Ahorro

Diagrama de clase: Consultas

CajaAhorro<<atributos de instancia>>codigo:enterosaldo:real<<consultas>>obtenerCodigo():enteroobtenerSaldo():enterotoString():String

Page 17: Introducción a la Programación Orientada a Objetos Los sistemas de software actuales suelen resolver problemas complejos que requieren soluciones dinámicas

Caso de Estudio: Caja de Ahorro

Diagrama de clase: Responsabilidades

CajaAhorro<<atributos de instancia>>codigo:enterosaldo:realRequiere código > 0 y saldo>=0

Page 18: Introducción a la Programación Orientada a Objetos Los sistemas de software actuales suelen resolver problemas complejos que requieren soluciones dinámicas

Caso de Estudio: Caja de Ahorro

CajaAhorro

<<atributos de instancia>>codigo:enterosaldo:real<<constructores>>CajaAhorro(c:entero)CajaAhorro(c:entero,s:float)<<comandos>> depositar(mto:real)extraer(mto:real):boolean <<consultas>>obtenerCodigo():enteroobtenerSaldo():enterotoString():String

Requiere código > 0 y saldo>=0

Si mto > saldo retorna false y la extracción no se realiza

Requiere c y s > 0

Diagrama de clase

Page 19: Introducción a la Programación Orientada a Objetos Los sistemas de software actuales suelen resolver problemas complejos que requieren soluciones dinámicas

Caso de Estudio: Caja de Ahorro

El diseñador decidió que de cada Caja de Ahorro solo es relevante representar el código y el saldo. El código tiene que ser estrictamente mayor a 0, el saldo debe ser no negativo.En el momento que se crea una cuenta es indispensable establecer el código, que no va a cambiar. El saldo puede establecerse explícitamente al crearse una cuenta o queda inicializado en 0 implícitamente.

Decisiones de diseño

Page 20: Introducción a la Programación Orientada a Objetos Los sistemas de software actuales suelen resolver problemas complejos que requieren soluciones dinámicas

Caso de Estudio: Caja de Ahorro

Los dos comandos modifican el saldo de la cuenta.Los dos comandos requieren que el parámetro mto contenga un valor mayor a 0. La clase que usa a la clase CajaAhorro es responsable de garantizar que saldo sea no negativo. El comando extraer retorna un valor booleano indicando si la operación puedo realizarse.

Decisiones de diseño

Page 21: Introducción a la Programación Orientada a Objetos Los sistemas de software actuales suelen resolver problemas complejos que requieren soluciones dinámicas

Caso de Estudio: Caja de Ahorro

Implementación en Java

La unidad básica de programación en Java es la clase.

Un programa en Java está constituido por una colección de clases .

La implementación de una clase consiste en definir sus miembros:

•Atributos: variables de instancia y de clase

•Servicios: constructores y métodos

Page 22: Introducción a la Programación Orientada a Objetos Los sistemas de software actuales suelen resolver problemas complejos que requieren soluciones dinámicas

Caso de Estudio: Caja de Ahorro

class CajaAhorro{

//Atributos de Instancia/*El codigo se establece al crear la cuenta y no cambia*/private int codigo;private float saldo;

CajaAhorro<<atributos de instancia>>codigo:enterosaldo:real

Implementación en Java: Atributos

Page 23: Introducción a la Programación Orientada a Objetos Los sistemas de software actuales suelen resolver problemas complejos que requieren soluciones dinámicas

Caso de Estudio: Caja de Ahorro

class CajaAhorro{

//Atributos de Instancia/*El codigo se establece al crear la cuenta y no cambia*/private int codigo;private float saldo;

La clase define dos atributos de instancia. Cada objeto que se crea de clase CajaAhorro tendrá un código y un saldo.Cada atributo se liga a una variable de tipo elemental.El modificador private indica que el alcance de las variables es la clase completa.

Implementación en Java: Atributos

Page 24: Introducción a la Programación Orientada a Objetos Los sistemas de software actuales suelen resolver problemas complejos que requieren soluciones dinámicas

Caso de Estudio: Caja de Ahorro

// Constructorespublic CajaAhorro(int cod) {

codigo = cod; saldo = 0;}public CajaAhorro(int cod, float sal) {

codigo = cod; saldo = sal;}

CajaAhorro<<atributos de instancia>>codigo:enterosaldo:real

<<constructores>>CajaAhorro(c:entero)CajaAhorro(c:entero,s:float)

Implementación en Java: Constructores

Page 25: Introducción a la Programación Orientada a Objetos Los sistemas de software actuales suelen resolver problemas complejos que requieren soluciones dinámicas

Caso de Estudio: Caja de Ahorro

La clase define dos constructores. Como el identificador está sobrecargado, el número o tipo de parámetros no puede ser el mismo en ambos. El primero recibe un único parámetro que se usa para establecer el valor del codigo. El segundo recibe dos parámetros, el primero se usa para establecer el valor del codigo y el segundo se asigna al saldo.

Implementación en Java: Constructores

Page 26: Introducción a la Programación Orientada a Objetos Los sistemas de software actuales suelen resolver problemas complejos que requieren soluciones dinámicas

Caso de Estudio: Caja de Ahorro

// Comandospublic void depositar(float mto){//Requiere mto > 0 saldo+=mto;}

CajaAhorro<<atributos de instancia>>codigo:enterosaldo:real

<<comandos>> depositar(mto:real)extraer(mto:real):boolean

Implementación en Java: Comandos

Page 27: Introducción a la Programación Orientada a Objetos Los sistemas de software actuales suelen resolver problemas complejos que requieren soluciones dinámicas

Caso de Estudio: Caja de Ahorro

// Comandospublic void depositar(float mto){//Requiere mto > 0 saldo+=mto;}

La palabra void indica que el método no retorna un resultado. El pasaje de parámetros en Java es por valor, si el método modificara el valor de mto, el cambio no es visible fuera de la clase.

Implementación en Java: Comandos

Page 28: Introducción a la Programación Orientada a Objetos Los sistemas de software actuales suelen resolver problemas complejos que requieren soluciones dinámicas

Caso de Estudio: Caja de Ahorro

// Comandospublic void depositar(float mto){//Requiere mto > 0 saldo+=mto;}

La instrucción de asignación es equivalente a:saldo = saldo + mto;

El comentario del diagrama se mantiene en el código estableciendo la responsabilidad de la clase que usa a CajaAhorro.

Implementación en Java: Comandos

Page 29: Introducción a la Programación Orientada a Objetos Los sistemas de software actuales suelen resolver problemas complejos que requieren soluciones dinámicas

Caso de Estudio: Caja de Ahorro

public boolean extraer(float mto){/*si el mto es mayor al saldo retorna false y la extracción no se realiza*/ boolean puede = true; if (saldo >= mto)saldo=saldo-mto; else puede = false; return puede;}

La variable puede es local al método.El tipo del resultado es compatible con el tipo de la expresión que retorna.

Implementación en Java: Comandos

Page 30: Introducción a la Programación Orientada a Objetos Los sistemas de software actuales suelen resolver problemas complejos que requieren soluciones dinámicas

Caso de Estudio: Caja de Ahorro

// Consultaspublic int obtenerCodigo(){ return codigo;}public float obtenerSaldo(){ return saldo;}

CajaAhorro<<atributos de instancia>>codigo:enterosaldo:real

<<consultas>>obtenerCodigo():enteroobtenerSaldo():real

Implementación en Java: Consultas

Page 31: Introducción a la Programación Orientada a Objetos Los sistemas de software actuales suelen resolver problemas complejos que requieren soluciones dinámicas

Caso de Estudio: Caja de Ahorro

// Consultaspublic int obtenerCodigo(){ return codigo;}public float obtenerSaldo(){ return saldo;}

Las consultas obtenerCodigo y obtenerSaldo se suelen llamar “triviales”, cada una retorna el valor de un atributo.Como el alcance de los atributos se restringe a la clase, la única manera de acceder al código o al saldo, fuera de la clase, es mediante los servicios provistos.

Implementación en Java: Consultas

Page 32: Introducción a la Programación Orientada a Objetos Los sistemas de software actuales suelen resolver problemas complejos que requieren soluciones dinámicas

Caso de Estudio: Caja de Ahorro

public String toString(){ return codigo+" "+saldo;} }

El nombre toString es estandar para referirse a un comando que retorna una cadena de caracteres cuyo valor es la concatenación de los valores de los atributos del objeto que recibe el mensaje.String es una clase provista por Java. El operador + permite convertir valores de diferentes tipos elementales y concatenarlos.

Implementación en Java: Consultas

Page 33: Introducción a la Programación Orientada a Objetos Los sistemas de software actuales suelen resolver problemas complejos que requieren soluciones dinámicas

Durante la implementación de un sistema para un Banco, la clase CajaAhorro puede pensarse como una pieza, una componente de la colección de clases que en conjunto va a constituir el sistema.

Antes de que la clase se integre en la colección y pueda ser usada por otras clases, es muy importante verificar que actúa de acuerdo a su especificación.Una alternativa es escribir una clase testerCajaAhorro que verifique los servicios provistos por la clase CajaAhorro.

Caso de Estudio: Caja de Ahorro

La verificación de los servicios de una clase

Page 34: Introducción a la Programación Orientada a Objetos Los sistemas de software actuales suelen resolver problemas complejos que requieren soluciones dinámicas

class testCajaAhorro {public static void main (String a[]){ CajaAhorro cb1;

La clase testCajaAhorro usa a la clase CajaAhorro.El método main declara una variable cb1 de clase CajaAhorro.

Caso de Estudio: Caja de Ahorro

La verificación de los servicios de una clase

Page 35: Introducción a la Programación Orientada a Objetos Los sistemas de software actuales suelen resolver problemas complejos que requieren soluciones dinámicas

La instrucción de asignación:• Crea un objeto de clase CajaAhorro• Invoca al constructor de la clase• Liga el objeto a la variable cb1.

Caso de Estudio: Caja de Ahorro

La verificación de los servicios de una clase

class testCajaAhorro {public static void main (String a[]){ CajaAhorro cb1; cb1 = new CajaAhorro (123,600);

Page 36: Introducción a la Programación Orientada a Objetos Los sistemas de software actuales suelen resolver problemas complejos que requieren soluciones dinámicas

class testCajaAhorro {public static void main (String a[]){ CajaAhorro cb1; cb1 = new CajaAhorro (123,600);

cb1.depositar(100); cb1.extraer(500);

Se envía el mensaje extraer con parámetro real 500.Cuando el objeto ligado a la variable cb1 recibe el mensaje ejecuta el método extraer.El parámetro real se liga al parámetro formal mto. La ejecución del método extraer modifica el valor del parámetro saldo y retorna un valor booleano que no se usa.

Caso de Estudio: Caja de Ahorro

La verificación de los servicios de una clase

Page 37: Introducción a la Programación Orientada a Objetos Los sistemas de software actuales suelen resolver problemas complejos que requieren soluciones dinámicas

class testCajaAhorro {public static void main (String a[]){ CajaAhorro cb1; cb1 = new CajaAhorro (123,600);

cb1.depositar(100); cb1.extraer(500); cb1.extraer(400);

Nuevamente se envía el mensaje extraer al objeto ligado a la variable cb1. El mensaje provoca la ejecución del comando extraer, eque evalúa el condicional y retorna false, sin modificar el saldo.

Caso de Estudio: Caja de Ahorro

La verificación de los servicios de una clase

Page 38: Introducción a la Programación Orientada a Objetos Los sistemas de software actuales suelen resolver problemas complejos que requieren soluciones dinámicas

Una alternativa más razonable es usar el valor que retorna y mostrar un mensaje adecuado si la operación no pudo realizarse.

Caso de Estudio: Caja de Ahorro

La verificación de los servicios de una claseclass testCajaAhorro {public static void main (String a[]){ CajaAhorro cb1; cb1 = new CajaAhorro (123,600);

cb1.depositar(100); if(!cb1.extraer(500)) System.out.println(“No pudo extraer “+500); if(!cb1.extraer(400)) System.out.println(“No pudo extraer “+400); 

}

Page 39: Introducción a la Programación Orientada a Objetos Los sistemas de software actuales suelen resolver problemas complejos que requieren soluciones dinámicas

class testCajaAhorro {public static void main (String a[]){ CajaAhorro cb1; cb1 = new CajaAhorro (123,600);

cb1.depositar(100); if(!cb1.extraer(500)) System.out.println(“No pudo extraer “+500); if(!cb1.extraer(400)) System.out.println(“No pudo extraer “+400);  System.out.println (cb1.toString());}

Luego de una secuencia de depósitos y extracciones, el objeto cb1 recibe el mensaje toString que retorna el valor del código de la cuenta y el valor del saldo.

La verificación de los servicios de una clase

Caso de Estudio: Caja de Ahorro

Page 40: Introducción a la Programación Orientada a Objetos Los sistemas de software actuales suelen resolver problemas complejos que requieren soluciones dinámicas

class testCajaAhorro {public static void main (String a[]){ CajaAhorro cb1,cb2; cb1 = new CajaAhorro (123,600); cb2 = new CajaAhorro (111); cb1.depositar(100); if(!cb1.extraer(500)) System.out.println(“No pudo extraer “+500); if(!cb1.extraer(400)) System.out.println(“No pudo extraer “+400);  System.out.println (cb1.toString()); cb2.depositar(100); if(!cb2.extraer(500)) System.out.println(“No pudo extraer “+500); if(!cb2.extraer(400)) System.out.println(“No pudo extraer “+400);  System.out.println (cb2.toString());}

Caso de Estudio: Caja de Ahorro

La verificación de los servicios de una clase

Page 41: Introducción a la Programación Orientada a Objetos Los sistemas de software actuales suelen resolver problemas complejos que requieren soluciones dinámicas

Objetos y referencias

En ejecución, el valor de una variable de un tipo clase es una referencia. Una referencia puede ser nula o estar ligada al estado interno del objeto. Cuando se usa new para crear un objeto, la variable queda ligada a este objeto, es decir, mantiene una referencia al estado interno del objeto. La estructura del estado interno, depende de las variables de instancia.

Page 42: Introducción a la Programación Orientada a Objetos Los sistemas de software actuales suelen resolver problemas complejos que requieren soluciones dinámicas

Objetos y referencias

Una declaración de variable como:CajaAhorro cb1;Crea una variable que por el momento mantiene una referencia nula.Graficamos a través de un diagrama de objetos:

Page 43: Introducción a la Programación Orientada a Objetos Los sistemas de software actuales suelen resolver problemas complejos que requieren soluciones dinámicas

Objetos y referencias

La ejecución de:

cb1 = new CajaAhorro (111,1000);provoca la creación de un objeto de clase CajaAhorro

El diagrama de objetos es ahora:

En este ejemplo, el estado interno del objeto ligado a la variable cb1 está formado por los atributos codigo y saldo.

Page 44: Introducción a la Programación Orientada a Objetos Los sistemas de software actuales suelen resolver problemas complejos que requieren soluciones dinámicas

Objetos y referencias

CajaAhorro cb1; cb1 = new CajaAhorro(111,1000);

CajaAhorro cb1 = new CajaAhorro(111,1000);

Es equivalente a:

En el primer caso la declaración de la variable se separa de la creación del objeto. En el segundo caso, una única instrucción provoca la declaración de la variable y la creación del objeto.En ambos la variable cb1 queda ligada al objeto porque mantiene una referencia a su estado interno.

Page 45: Introducción a la Programación Orientada a Objetos Los sistemas de software actuales suelen resolver problemas complejos que requieren soluciones dinámicas

Objetos y referencias

CajaAhorro cb1; CajaAhorro cb2;

La representación por referencia tiene una consecuencia importante en la asignación. La declaración de las variables:

Reserva dos celdas de memoria que mantendrán referencias no ligadas, como ilustra el siguiente diagrama:

Page 46: Introducción a la Programación Orientada a Objetos Los sistemas de software actuales suelen resolver problemas complejos que requieren soluciones dinámicas

Objetos y referencias

La creación de los objetos modifica el diagrama: cb1 = new CajaAhorro (111,1000); cb2 = new CajaAhorro (112);

Observemos que el diagrama es un modelo del objeto, una representación gráfica.

Page 47: Introducción a la Programación Orientada a Objetos Los sistemas de software actuales suelen resolver problemas complejos que requieren soluciones dinámicas

Objetos y referencias

Una asignación modifica nuevamente el diagrama:

CajaAhorro cb3 = cb1;

Esto es, las variables cb1 y cb3 mantienen referencias a un mismo objeto.

Page 48: Introducción a la Programación Orientada a Objetos Los sistemas de software actuales suelen resolver problemas complejos que requieren soluciones dinámicas

Objetos y referencias

Si el objeto recibe un mensaje que modifica su estado interno, como por ejemplo:

cb1.depositar(200);

System.out.println (cb3.toString());

muestra en consola: 111 1200.0

Page 49: Introducción a la Programación Orientada a Objetos Los sistemas de software actuales suelen resolver problemas complejos que requieren soluciones dinámicas

Introducción a la Programación Orientada a Objetos

•Declarar las variables al principio del bloque.•Usar identificadores significativos e indentar adecuadamente. •Incluir comentarios que describan la estructura del código, la funcionalidad de cada método y las responsabilidades establecidas en el diseño.•No exagerar con los comentarios oscureciendo la lógica de la resolución.•No escribir comentarios que expliquen características del lenguaje•Si un método produce un resultado, debería incluir una única instrucción de retorno al final, excepto si todo el código del método es un if-else con instrucciones simples. •Los atributos de instancia los declaramos privados•Los atributos de clase los declaramos privados y constantes

Convenciones