la programación orientada a objetos brinda un principio, una metodología y herramientas que apoyan...

46
La programación orientada a objetos brinda un principio, una metodología y herramientas que apoyan al proceso de desarrollo de software en todas sus etapas. Las principales herramientas son el lenguaje de modelado y el lenguaje de programación. El principal objetivo de la programación orientada a objetos es favorecer la calidad y la productividad. Introducción a la Programación Orientada a Objetos Programación Orientada a Objetos

Upload: bernardita-pintado

Post on 22-Jan-2015

4 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: La programación orientada a objetos brinda un principio, una metodología y herramientas que apoyan al proceso de desarrollo de software en todas sus etapas

La programación orientada a objetos brinda un principio, una metodología y herramientas que apoyan al proceso de desarrollo de software en todas sus etapas. Las principales herramientas son el lenguaje de modelado y el lenguaje de programación.El principal objetivo de la programación orientada a objetos es favorecer la calidad y la productividad.

Introducción a la Programación Orientada a Objetos

Programación Orientada a Objetos

Page 2: La programación orientada a objetos brinda un principio, una metodología y herramientas que apoyan al proceso de desarrollo de software en todas sus etapas

La calidad puede medirse de acuerdo a distintos factores. Algunos de estos factores son percibidos por el usuario o cliente. Otros factores son transparentes para el usuario o cliente, aunque por supuesto lo afectan indirectamente.

Introducción a la Programación Orientada a Objetos

La calidad de un producto de software puede definirse como su capacidad para satisfacer los requisitos establecidos durante el desarrollo de requerimientos.

Calidad de Software

Page 3: La programación orientada a objetos brinda un principio, una metodología y herramientas que apoyan al proceso de desarrollo de software en todas sus etapas

CorrectitudUn producto de software correcto actúa de acuerdo a los requerimientos especificados.EficienciaUn producto de software es eficiente si tiene una baja demanda de recursos de hardware, en particular tiempo de CPU, espacio de memoria y ancho de banda.

PortabilidadUn producto de software es portable si puede ejecutarse sobre diferentes plataforma de hardware y de software.

Introducción a la Programación Orientada a Objetos

Calidad de Software

Page 4: La programación orientada a objetos brinda un principio, una metodología y herramientas que apoyan al proceso de desarrollo de software en todas sus etapas

SimplicidadUn producto de software es simple si es fácil de usar, su interfaz es amigable y no requiere demasiado entrenamiento ni capacitación.

RobustezUn producto de software es robusto se reacciona adecuadamente aun en circunstancias no especificadas en los requerimientos.

Calidad de Software

Page 5: La programación orientada a objetos brinda un principio, una metodología y herramientas que apoyan al proceso de desarrollo de software en todas sus etapas

Introducción a la Programación Orientada a Objetos

ExtensibilidadUn producto de software es extensible si es fácil adaptarlo a cambios en la especificación de requerimientos. El primer requerimiento para la extensibilidad es la legibilidad.

ReusabilidadUn módulo de software es reusable si puede utilizarse para la construcción de diferentes aplicaciones.

Productividad de Software

Page 6: La programación orientada a objetos brinda un principio, una metodología y herramientas que apoyan al proceso de desarrollo de software en todas sus etapas

Un lenguaje de programación orientado a objetos brinda mecanismos que favorecen la aplicación de la metodología.Uno de los mecanismos debe permitir dividir el programa en módulos.El mecanismo de modularización provisto por la mayoría de los lenguajes de programación orientados a objetos es la clase. Una clase es un módulo de software que puede construirse y verificarse con cierta independencia respecto a los demás.

Lenguajes Orientados a Objetos

Page 7: La programación orientada a objetos brinda un principio, una metodología y herramientas que apoyan al proceso de desarrollo de software en todas sus etapas

Un programa va a estar constituido por una colección de clases relacionadas entre sí. Cada clase es una pieza, una componente de la colección de clases que en conjunto van a conformar el programa.

Estructura de un programa en Java

Cada clase define un conjunto de miembros que pueden ser:

• atributos (de clase y de instancia)

• constructores

• métodos (comandos y consultas)

Page 8: La programación orientada a objetos brinda un principio, una metodología y herramientas que apoyan al proceso de desarrollo de software en todas sus etapas

En Java una de las clases deben contener un método llamado main() que inicia la ejecución del programa. Esa clase puede crear un objeto de otra clase y enviarle un mensaje. Cuando un objeto recibe un mensaje selecciona un método dentro de su clase y lo ejecuta. Si la programación es secuencial, terminar la ejecución del método el control continúa en la instrucción que sigue al envío del mensaje.

Estructura de un programa en Java

Page 9: La programación orientada a objetos brinda un principio, una metodología y herramientas que apoyan al proceso de desarrollo de software en todas sus etapas

class Control{public static void main(String a[]){ float p; PresionArterial obj = new PresionArterial (100,60); p = obj.obtenerPresionPulso();}} class PresionArterial{

//Atributos de instanciaprivate float maxima;private float minima;…public float obtenerPresionPulso(){ return maxima-minima;}}

Estructura de un programa en Java

Page 10: La programación orientada a objetos brinda un principio, una metodología y herramientas que apoyan al proceso de desarrollo de software en todas sus etapas

Una clase puede pensarse como un PROVEEDOR de servicios.

Cada servicio va a ser usado desde una clase CLIENTE.

Entre la clase CLIENTE y la clase PROVEEDORA se establece un contrato a través de las responsabilidades que asume cada una.

Un mismo problema puede modelarse de maneras diferentes. En cada diseño alternativo la asignación de responsabilidades puede variar.

Estructura de un programa en Java

Page 11: La programación orientada a objetos brinda un principio, una metodología y herramientas que apoyan al proceso de desarrollo de software en todas sus etapas

La interface de una clase

La programación orientada a objetos propone que la interface de una clase esté constituida únicamente por un conjunto de servicios (constructores y métodos). Los atributos quedan encapsulados.

La clase CLIENTE solo conoce la interface de la clase PROVEEDORA.

CLIENTE PROVEEDOR DE SERVICIOS

interface

Page 12: La programación orientada a objetos brinda un principio, una metodología y herramientas que apoyan al proceso de desarrollo de software en todas sus etapas

El encapsulamiento es un mecanismo que permite la definición de módulos de software que pueden ser utilizados como “cajas negras”, esto es, sabiendo qué hacen sin saber cómo lo hacen.

Esto es, el programador escribe el código de la clase PresionArterial a partir de su especificación y diseño, sin conocer conocer la especificación y diseño del resto del sistema.

El programador de la clase que usa a PresionArterial, conoce su interface, pero no la implementación.

Encapsulamiento

Page 13: La programación orientada a objetos brinda un principio, una metodología y herramientas que apoyan al proceso de desarrollo de software en todas sus etapas

Así, el encapsulamiento permite esconder los detalles de la implementación de un módulo, de modo que sus clientes sólo conozcan su funcionalidad.

Si cambian la implementación de un módulo, en tanto no cambie su funcionalidad, los módulos que lo usan no se verán afectados.

Se reducen así las dependencias entre diferentes unidades de software, de modo que estos son más fáciles de leer, verificar y modificar.

Encapsulamiento

Page 14: La programación orientada a objetos brinda un principio, una metodología y herramientas que apoyan al proceso de desarrollo de software en todas sus etapas

Introducción a la Programación Orientada a Objetos

En Java los modificadores de acceso determinan el nivel de encapsulamiento.Un miembro que se declara privado sólo puede ser usado dentro de la misma clase. Si un miembro se define como público es visible desde el exterior de la clase.Declararemos como privados los atributos. Declararemos como públicos los métodos que estén especificados en el diagrama de clases. Los métodos auxiliares los definiremos como privados.

EncapsulamientoModificadores de Acceso

Page 15: La programación orientada a objetos brinda un principio, una metodología y herramientas que apoyan al proceso de desarrollo de software en todas sus etapas

Caso de Estudio: Presión Arterial

La presión arterial es la fuerza de presión ejercida por la sangre circulante sobre las arterias y constituye uno de los principales signos vitales de un paciente. Se mide por medio de un esfigmomanómetro, que usa la altura de una columna de mercurio para reflejar la presión de circulación. Los valores de la presión sanguínea se expresan en kilopascales (kPa) o en milímetros del mercurio (mmHg). Para convertir de milímetro de mercurio a kilopascales el valor se multiplica por 0,13.

Page 16: La programación orientada a objetos brinda un principio, una metodología y herramientas que apoyan al proceso de desarrollo de software en todas sus etapas

La presión sistólica  se define como el máximo de la curva de presión en las arterias y ocurre cerca del principio del ciclo cardíaco durante la sístole o contracción ventricular; la presión diastólica es el valor mínimo de la curva de presión en la fase de diástole o relajación ventricular del ciclo cardíaco. La presión de pulso refleja la diferencia entre las presiones máxima y mínima medidas.Estas medidas de presión no son estáticas, experimentan variaciones naturales entre un latido del corazón a otro y a través del día y tienen grandes variaciones de un individuo a otro. 

Caso de Estudio: Presión Arterial

Page 17: La programación orientada a objetos brinda un principio, una metodología y herramientas que apoyan al proceso de desarrollo de software en todas sus etapas

La hipertensión se refiere a la presión sanguínea que es anormalmente alta, y se puede establecer un umbral para la máxima y otro para la mínima que permitan considerar una situación de alarma.

Caso de Estudio: Presión Arterial

Page 18: La programación orientada a objetos brinda un principio, una metodología y herramientas que apoyan al proceso de desarrollo de software en todas sus etapas

alarmaHipertensión: maxima>umbralMax o minima>umbralMin

PresionPulso: máxima-mínima

requiere ma > mi

PresionArterial

<<atributos de clase>>umbralMax,umbralMin :real<<atributos de instancia>>maxima,minima :real

<<Constructores>> PresionArterial(ma,mi:real)<<Consultas>>obtenerUmbralMax():real obtenerUmbralMin():realobtenerMaximaMM():realobtenerMinimaMM():realobtenerMaximaHP():realobtenerMinimaHP().real obtenerPresionPulso():realalarmaHipertension():boolean

Requiere máxima > mínima y ambos mayores a 0. Los valores están expresados en milímetros de mercurio.

Caso de Estudio: Presión ArterialAlternativa 1

Page 19: La programación orientada a objetos brinda un principio, una metodología y herramientas que apoyan al proceso de desarrollo de software en todas sus etapas

class PresionArterial {

}

Alternativa 1

Caso de Estudio: Presión Arterial

/*Valores representados el milímetros de mercurio*///Atributos de claseprivate static final float umbralMax=120;private static final float umbralMin=80;

//Atributos de instanciaprivate float maxima;private float minima;

//Constructorpublic PresionArterial(float ma,float mi){//Requiere ma > mi maxima = ma; minima = mi;}

Page 20: La programación orientada a objetos brinda un principio, una metodología y herramientas que apoyan al proceso de desarrollo de software en todas sus etapas

class PresionArterial {…

}

Caso de Estudio: Presión Arterial

//Consultaspublic float obtenerMaximaMM(){ return maxima;}public float obtenerMinimaMM(){ return minima;}public double obtenerMaximaHP(){//Convierte a hectopascales return maxima*0.13;}public double obtenerMinimaHP(){//Convierte a hectopascales return minima*0.13;}

Alternativa 1

Page 21: La programación orientada a objetos brinda un principio, una metodología y herramientas que apoyan al proceso de desarrollo de software en todas sus etapas

alarmaHipertensión: maxima>umbralMax o minima>umbralMin

PresionPulso: máxima-mínima

requiere ma > mi

Requiere máxima > mínima y ambos mayores a 0. Los valores están expresados en hectopascales.

Caso de Estudio: Presión ArterialAlternativa 2PresionArterial

<<atributos de clase>>umbralMax,umbralMin :real<<atributos de instancia>>maxima,minima :real

<<Constructores>> PresionArterial(ma,mi:real)<<Consultas>>obtenerUmbralMax():real obtenerUmbralMin():realobtenerMaximaMM():realobtenerMinimaMM():realobtenerMaximaHP():realobtenerMinimaHP().real obtenerPresionPulso():realalarmaHipertension():boolean

Page 22: La programación orientada a objetos brinda un principio, una metodología y herramientas que apoyan al proceso de desarrollo de software en todas sus etapas

class PresionArterial {

}

Alternativa 2

Caso de Estudio: Presión Arterial

/*Valores representados en hectopascales*///Atributos de claseprivate static final float umbralMax=15.6;private static final float umbralMin=10.4;

//Atributos de instanciaprivate float maxima;private float minima;

//Constructorpublic PresionArterial(float ma,float mi){//Requiere ma > mi maxima = ma; minima = mi;}

Page 23: La programación orientada a objetos brinda un principio, una metodología y herramientas que apoyan al proceso de desarrollo de software en todas sus etapas

class PresionArterial {…

}

Caso de Estudio: Presión Arterial

//Consultaspublic float obtenerMaximaMM(){//Convierte a milímetros de mercurio return maxima/0.13;}public float obtenerMinimaMM(){//Convierte a milímetros de mercurio return minima/0.13;}public double obtenerMaximaHP(){ return maxima;}

public double obtenerMinimaHP(){ return minima;}

Alternativa 2

Page 24: La programación orientada a objetos brinda un principio, una metodología y herramientas que apoyan al proceso de desarrollo de software en todas sus etapas

class testPresion {public static void main (String a[]){ PresionArterial mDia; PresionArterial mNoche; mDia = new PresionArterial (115,60); mNoche = new PresionArterial (110,62); float max1 = mDia.obtenerMaximaHP(); float max2 = mNoche.obtenerMaximaHP();  System.out.println ("Maxima de la mañana "+max1); System.out.println ("Maxima de la noche "+max2); }}

Caso de Estudio: Presión ArterialLa clase tester

La clase Cliente necesita saber conocer las unidades en el momento que crea el objeto.

Page 25: La programación orientada a objetos brinda un principio, una metodología y herramientas que apoyan al proceso de desarrollo de software en todas sus etapas

La ejecución del programa va a comenzar con la ejecución del método main.

Las instrucciones: PresionArterial mDia; PresionArterial mNoche;

Declaran dos variables de clase PresionArterial

mDia = new PresionArterial (115,60); mNoche = new PresionArterial (110,62);

Crean dos objetos de clase PresionArterial

Caso de Estudio: Presión ArterialLa clase tester

Page 26: La programación orientada a objetos brinda un principio, una metodología y herramientas que apoyan al proceso de desarrollo de software en todas sus etapas

La instrucción:

float max1 = mDia.obtenerMaximaHP();

envía el mensaje obtenerMaximaHP() al objeto ligado a la variable mDia. El mensaje provoca la ejecución del método provisto por la clase y retorna un valor de tipo float que se asigna a la variable max1.

Caso de Estudio: Presión ArterialLa clase tester

Page 27: La programación orientada a objetos brinda un principio, una metodología y herramientas que apoyan al proceso de desarrollo de software en todas sus etapas

mDia

La declaración:PresionArterial mDia;

Puede graficarse a través de un diagrama de objetos:

El valor de una variable mDia es una referencia nula.

Caso de Estudio: Presión ArterialObjetos y Referencias

Page 28: La programación orientada a objetos brinda un principio, una metodología y herramientas que apoyan al proceso de desarrollo de software en todas sus etapas

mDia:PresionArterialmaxima = 95minima =60

//Constructorpublic PresionArterial(float ma,float mi){//Requiere ma > mi maxima = ma; minima = mi;}

La creación de un objeto:mDia = new PresionArterial(95,60);Puede graficarse como:

Caso de Estudio: Presión ArterialObjetos y Referencias

Page 29: La programación orientada a objetos brinda un principio, una metodología y herramientas que apoyan al proceso de desarrollo de software en todas sus etapas

Una variable declarada de una clase mantiene una referencia al estado interno de un objeto de su clase.La estructura de este bloque de memoria, esto es, la estructura del estado interno, depende de las variables de instancia. En este ejemplo la variable mDia mantiene una referencia a un objeto de clase PresionArterial. El estado interno del objeto ligado a la variable mDia está formado por los atributos maxima y minima.

Caso de Estudio: Presión ArterialObjetos y Referencias

Page 30: La programación orientada a objetos brinda un principio, una metodología y herramientas que apoyan al proceso de desarrollo de software en todas sus etapas

PresionArterial mDia; mDia = new PresionArterial(95,60);

• Reserva una celda de memoria para la variable mDia

• Reserva un espacio en memoria para mantener el estado interno un objeto de software de clase PresionArterial

• Almacena la dirección del objeto de software en la variable mDia.

• Invoca al constructor e inicializa el estado interno de acuerdo al código del constructor.

Caso de Estudio: Presión ArterialObjetos y Referencias

Page 31: La programación orientada a objetos brinda un principio, una metodología y herramientas que apoyan al proceso de desarrollo de software en todas sus etapas

PresionArterial mDia,mTarde; PresionArterial mNoche;

Las declaraciones de las variables:

Reserva tres celdas de memoria que mantendrán referencias no ligadas.

mDia

mNoche

mTarde

Caso de Estudio: Presión ArterialObjetos y Referencias

Page 32: La programación orientada a objetos brinda un principio, una metodología y herramientas que apoyan al proceso de desarrollo de software en todas sus etapas

La creación de los objetos modifica el diagrama: mDia = new PresionArterial (95,60); mNoche = new PresionArterial (98,61);

mDia:PresionArterialmaxima = 95minima =60

mNoche

:PresionArterialmaxima = 98minima =61

mTarde

Caso de Estudio: Presión ArterialObjetos y Referencias

Page 33: La programación orientada a objetos brinda un principio, una metodología y herramientas que apoyan al proceso de desarrollo de software en todas sus etapas

La asignación modifica nuevamente el diagrama: mTarde = mDia;

mDia:PresionArterialmaxima = 95minima =60

mNoche

:PresionArterialmaxima = 98minima =61

mTarde

Caso de Estudio: Presión ArterialObjetos y Referencias

Page 34: La programación orientada a objetos brinda un principio, una metodología y herramientas que apoyan al proceso de desarrollo de software en todas sus etapas

mDia:PresionArterialmaxima = 95minima =60

mNoche

:PresionArterialmaxima = 98minima =61

mTarde

Las mDia y mTarde referencian a un mismo objeto, tienen entonces una misma identidad.

Caso de Estudio: Presión ArterialIdentidad

Page 35: La programación orientada a objetos brinda un principio, una metodología y herramientas que apoyan al proceso de desarrollo de software en todas sus etapas

mDia:PresionArterialmaxima = 95minima =60

mNoche

:PresionArterialmaxima = 98minima =61

mTarde

El operador relacional aplicado a variables de tipo clase, compara por identidad.

(mTarde == mDia) true

Caso de Estudio: Presión ArterialIdentidad e Igualdad

Page 36: La programación orientada a objetos brinda un principio, una metodología y herramientas que apoyan al proceso de desarrollo de software en todas sus etapas

PresionArterial oDia, oNoche; oDia = new PresionArterial (100,70); oNoche = new PresionArterial (100,70);

oDia:PresionArterialmaxima = 100minima = 70

oNoche

:PresionArterialmaxima = 100minima = 70

(oDia == oNoche) false

Caso de Estudio: Presión ArterialIdentidad e Igualdad

Page 37: La programación orientada a objetos brinda un principio, una metodología y herramientas que apoyan al proceso de desarrollo de software en todas sus etapas

PresionArterial oDia, oNoche; oDia = new PresionArterial (100,70); oNoche = new PresionArterial (100,70);

oDia:PresionArterialmaxima = 100minima = 70

oNoche

:PresionArterialmaxima = 100minima = 70

if((oDia.obtenerMinimaMM()==oNoche.obtenerMinimaMM() &&(oDia.obtenerMaximaMM()==oNoche.obtenerMaximaMM()))

Caso de Estudio: Presión ArterialIdentidad e Igualdad

Page 38: La programación orientada a objetos brinda un principio, una metodología y herramientas que apoyan al proceso de desarrollo de software en todas sus etapas

class testPresion {public static void main (String a[]){ int m1,m2,m3,m4; //Lectura de valores…

PresionArterial oDia,oNoche; oDia = new PresionArterial (m1,m2); oNoche = new PresionArterial (m3,m4);  if((oDia.obtenerMinimaMM()==oNoche.obtenerMinimaMM() &&(oDia.obtenerMaximaMM()==oNoche.obtenerMaximaMM())) System.out.println(“No hay variación”); else System.out.println(“Hay variación”); }}

Caso de Estudio: Presión ArterialIdentidad e Igualdad

Page 39: La programación orientada a objetos brinda un principio, una metodología y herramientas que apoyan al proceso de desarrollo de software en todas sus etapas

class testPresion {public static void main (String a[]){ int m1,m2,m3,m4; //Lectura de valores…

PresionArterial oDia,oNoche; oDia = new PresionArterial (m1,m2); oNoche = new PresionArterial (m3,m4);  if(oDia.equals(oNoche)) System.out.println(“No hay variación”); else System.out.println(“Hay variación”); }}

Caso de Estudio: Presión ArterialIdentidad e Igualdad

Page 40: La programación orientada a objetos brinda un principio, una metodología y herramientas que apoyan al proceso de desarrollo de software en todas sus etapas

Caso de Estudio: Presión ArterialIdentidad e Igualdad

class PresionArterial {…//Atributos de instanciaprivate float maxima;private float minima;…

public boolean equals (PresionArterial p){ boolean ig; ig = maxima == p.obtenerMaximaMM() && minima == p.obtenerMinimaMM(); return ig;}

}

Page 41: La programación orientada a objetos brinda un principio, una metodología y herramientas que apoyan al proceso de desarrollo de software en todas sus etapas

Caso de Estudio: Presión ArterialIdentidad e Igualdad

class PresionArterial {…//Atributos de instanciaprivate float maxima;private float minima;…

public boolean equals (PresionArterial p){

return maxima == p.obtenerMaximaMM() && minima == p.obtenerMinimaMM();}

}

Page 42: La programación orientada a objetos brinda un principio, una metodología y herramientas que apoyan al proceso de desarrollo de software en todas sus etapas

Administración de Memoria en ejecución

Cuando se declara una variable se establece su nombre, su tipo y su alcance.

El tipo determina el conjunto de valores que la variable puede tomar y el conjunto de operaciones en las que puede participar.

El alcance determina su tiempo de vida y el segmento del programa en el cual la variable es visible y puede ser usada.

El compilador utiliza el tipo y el alcance para realizar chequeos que permiten prevenir algunos errores.

En Java una variable puede ser de tipo elemental o de tipo clase.

Page 43: La programación orientada a objetos brinda un principio, una metodología y herramientas que apoyan al proceso de desarrollo de software en todas sus etapas

En ejecución, el valor de una variable de tipo elemental es uno de los valores que corresponde a su tipo.

El valor de una variable de tipo clase es una referencia nula o ligada a un objeto.

La clase del objeto determina la estructura interna.

Cualquiera sea el tipo, los valores de las variables residen en memoria.

El programador tiene una visión abstracta de la memoria.

Administración de Memoria en ejecución

Page 44: La programación orientada a objetos brinda un principio, una metodología y herramientas que apoyan al proceso de desarrollo de software en todas sus etapas

La memoria puede visualizarse como una secuencia de celdas cada una de las cuales tiene asociado una dirección y un contenido.

0000 0010001

0001 1101000

0010 1110110

0011 0110001

0100 0110101

dirección contenido

Administración de Memoria en ejecución

Page 45: La programación orientada a objetos brinda un principio, una metodología y herramientas que apoyan al proceso de desarrollo de software en todas sus etapas

El contenido de una celda mantiene un valor y también el tipo de ese valor.

La misma secuencia de bits va a interpretarse diferente según el tipo.

El contenido de una celda puede ser la dirección de otra celda en memoria.

Dos celdas pueden coincidir en su contenido, pero no en la dirección.

En la memoria residen no sólo los datos sino también las instrucciones.

Tanto la dirección como el contenido son secuencias de bits (0 y 1).

Administración de Memoria en ejecución

Page 46: La programación orientada a objetos brinda un principio, una metodología y herramientas que apoyan al proceso de desarrollo de software en todas sus etapas

El programador define variables y expresiones que utilizan estás variables de manera consistente, pero el manejo de memoria es transparente para él.

No necesita conocer la representación interna de cada tipo, ni como se administra la memoria.

Cuando se crea una variable elemental se reserva espacio en memoria para mantener su valor.

Cuando se crea una variable de tipo clase reserva espacio en memoria para mantener una referencia, una dirección a otra celda de memoria.

Cuando se crea un objeto se reserva espacio en memoria para mantener el estado interno del objeto.

Administración de Memoria en ejecución