Introducción a la Programación Orientada a Objetos Sonia Rueda Departamento de Ciencias e...

Post on 25-Jan-2016

221 views 3 download

Transcript of Introducción a la Programación Orientada a Objetos Sonia Rueda Departamento de Ciencias e...

Introducción a la Programación Orientada a Objetos

Sonia Rueda

Introducción a la Programación Orientada a Objetos

Sonia Rueda

Departamento de Ciencias e Ingeniería

de la ComputaciónUNIVERSIDAD NACIONAL DEL SUR

2013

DEPARTAMENTO DE CIENCIAS E INGENIERÍA DE LA COMPUTACIÓNUNIVERSIDAD NACIONAL DEL SUR

Programación

Matemática

Software

Sistemas deHardware

Electrónica

Trabajo Finalde Carrera

Teoría

MateriaOptativa

Objetivos de las Materias de Programación

•Aprender Contenidos Conceptuales

Introducción a la Programación Orientada a Objetos

Resolución de Problemas y Algoritmos

Introducción a la Programación Orientada a

ObjetosAlgoritmoTipo de DatoIteraciónRecursividadDiseño Top-Down…

ObjetoClaseEncapsulamientoHerenciaPolimorfismo…

Objetivos de las Materias de Programación

Reforzar y desarrollar Competencias generales

• Comunicarse en forma oral y escrita

• Resolver problemas

• Aprender con autonomía

• Administrar el tiempo

• Trabajar en Equipo

Introducción a la Programación Orientada a Objetos

Objetivos de las Materias de Programación

Reforzar y desarrollar Competencias específicas

• Dividir problemas en subproblemas

• Diseñar algoritmos

• Utilizar diferentes lenguajes de diseño y de programación

Introducción a la Programación Orientada a Objetos

Objetivo de IPOO

Contenidos de IPOO

Aprender y aplicar los fundamentos de la programación orientada a objetos a la construcción de sistemas de software para resolver problemas de pequeña y mediana escala.

• Conceptos, principios y técnicas de programación orientada a objetos

• El lenguaje de programación Java

Introducción a la Programación Orientada a Objetos

Organización de las Clases

En las clases teóricas, en las prácticas y en el laboratorio se trabaja con un enfoque basado en la resolución de problemas.

En las clases teóricas se presentan conceptos, principios y técnicas de programación orientada a objetos y se aplican en ejemplos concretos.

En las clases prácticas se presenta el lenguaje de programación Java, se aplican los conceptos, principios y técnicas, se implementan clases a partir de diagramas y se diseñan los algoritmos que modelan los servicios.

En las clases de laboratorio se implementan y verifican las soluciones de algunos problemas seleccionados de los trabajos prácticos.

Introducción a la Programación Orientada a Objetos

Problemas y Soluciones

Introducción a la Programación Orientada a Objetos

Resolución de un Problema Programa

abstracción

DATOS

ACCIONES

Problemas y Soluciones

Introducción a la Programación Orientada a Objetos

Un programa es un modelo de la

resolución de un problema

Un lenguaje de programación es una notación formal para especificar

un modelo para la resolución de un problema

Problemas y Soluciones

Introducción a la Programación Orientada a Objetos

Un lenguaje de programación permite modelar datos y acciones.

El lenguaje brinda:

• Tipos de datos elementales y mecanismos para definir nuevos tipos.

•Acciones primitivas y mecanismos para definir nuevas acciones.

Problemas y Soluciones

Introducción a la Programación Orientada a Objetos

El software es el conjunto de programas que permiten que los dispositivos físicos de una computadora puedan ser utilizados.

El desarrollo de software es un proceso a partir del cual se construye

un modelo de la resoluciónde un problema

El proceso de desarrollo de Software

El desarrollo en cascada propone una secuencia específica de etapas para abarcar el proceso de desarrollo de software.

El producto final de este proceso es un sistema de software que resuelve el problema planteado por la especificación de requerimientos.

Todo sistema de software tiene un ciclo de vida durante el cual atraviesa diferentes etapas.

Introducción a la Programación Orientada a Objetos

El proceso de desarrollo de SoftwareEstudio de Factibilidad

Especificación 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 SoftwareEstudio de Factibilidad

Especificación de Requerimientos

Análisis y Diseño del Sistema

Implementación

Verificación

Mantenimiento

DOCUMENTACION

Un sistema de software se desarrolla para satisfacer una demanda.

La funcionalidad del sistema se especifica a partir de un conjunto de requerimientos.

El éxito de un sistema puede medirse en parte de acuerdo a en qué medida los requerimientos establecidos reflejan la demanda real.

El resultado de esta fase es un documento que establece qué hará el sistema y sirve de punto de partida para la documentación.

Introducción a la Programación Orientada a Objetos

El proceso de desarrollo de SoftwareEstudio de Factibilidad

Especificación de Requerimientos

Análisis y Diseño del Sistema

Implementación

Verificación

Mantenimiento

DOCUMENTACION

A partir del análisis de los requerimientos se diseña una solución.

El resultado de esta etapa es un documento que describe los módulos que integrarán el sistema, sus interfases y el modo en que se relacionan entre sí, los casos de prueba.

Existen diferentes herramientas y metodologías para encarar esta etapa y la elección de una de ellas tendrá un fuerte impacto en la elección del lenguaje de programación.

Introducción a la Programación Orientada a Objetos

El proceso de desarrollo de SoftwareEstudio de Factibilidad

Especificación de Requerimientos

Análisis y Diseño del Sistema

Implementación

Verificación

Mantenimiento

DOCUMENTACION

A partir del diseño se genera el programa escrito en un lenguaje de programación y toda la documentación referida al código.

El programa implementado se instala para ser verificado.

Introducción a la Programación Orientada a Objetos

Estudio de Factibilidad

Especificación de Requerimientos

Análisis y Diseño del Sistema

Implementación

Verificación

Mantenimiento

DOCUMENTACION

Se valida la implementación respecto a la especificación de requerimientos.

Existen distintas etapas en la verificación y diferentes formas de hacerlo, algunas informales y otras formales.

Los casos de prueba deberían ser diseñados cuidadosamente.

Una vez verificada la implementación se instala el sistema para su puesta en marcha.

Introducción a la Programación Orientada a Objetos

El proceso de desarrollo de Software

Estudio de Factibilidad

Especificación de Requerimientos

Análisis y Diseño del Sistema

Implementación

Verificación

Mantenimiento

DOCUMENTACION

Durante el ciclo de vida de un programa las necesidades del usuario cambian y normalmente crecen.

El mantenimiento involucra todos los cambios en el software que resultan de modificaciones en la especificación.

Introducción a la Programación Orientada a Objetos

El proceso de desarrollo de Software

Introducción a la Programación Orientada a Objetos

Los graduados de nuestras carreras están capacitados para:•Participar en cada una de las etapas del proceso de desarrollo de software seleccionando y aplicando metodologías y herramientas adecuadas.•Desarrollar nuevas metodologías y herramientas. •Administrar y Evaluar proyectos de software aplicando criterios de calidad y productividad. •Auditar y Certificar proyectos y sistemas de software considerando pautas técnicas y normas de seguridad.•Elaborar pautas técnicas y normas de seguridad que permitan resguardar y controlar recursos físicos y lógicos.

Incumbencias

Calidad de Software

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. Parte de los requisitos están establecidos en la especificación de requerimientos.

Calidad de SoftwareCorrectitudUn 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

Introducción a la Programación Orientada a Objetos

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

ConfiabilidadUn producto de software es confiable se reacciona adecuadamente aun en circunstancias no especificadas en los requerimientos.

Productividad de Software

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. 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.

Programación Orientada a Objetos

La programación orientada a objetos brinda un principio y una metodología que apoya al proceso de desarrollo de software en todas sus etapas.

El lenguaje de programación debe brindar mecanismos que permitan la aplicación de la metodología y contribuyan a favorecer la calidad y productividad.

Introducción a la Programación Orientada a Objetos

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.

Introducción a la Programación Orientada a Objetos

El concepto de Objeto

Introducción a la Programación Orientada a Objetos

ProblemaObjetos Reales

Programa en EjecuciónObjetos de

Software

abstracción

En ejecución, cada objeto del problema esta asociadoa una representación abstracta, un objeto de software

El concepto de Objeto

Los objetos de un problema pueden caracterizarse a través de atributos y un comportamiento.

Un atributo es una propiedad o cualidad y se representa como un dato.

El comportamiento está dado por el conjunto de servicios que el objeto brinda.

Los objetos se agrupan en clases de acuerdo a los atributos y servicios que los caracterizan.

Introducción a la Programación Orientada a Objetos

El concepto de Objeto

Una clase es un patrón o esquema que especifica los atributos y servicios compartidos por todos los objetos que pertenecen a ella.

Las clases se relacionan entre sí de maneras diferentes.

En esta materia vamos a presentar tres formas de relación: dependencia, asociación y herencia.

Introducción a la Programación Orientada a Objetos

El concepto de Clase

En la etapa de análisis de un sistema se identifican objetos y se los caracteriza de acuerdo a sus atributos y su comportamiento.

En la etapa de diseño los objetos se agrupan en clases. Los objetos de una misma clase comparten los mismos atributos y servicios.

El resultado de un diseño orientado a objetos es un diagrama de clases escrito en un lenguaje de modelado.

El diagrama especifica la colección de clases y sus relaciones.

Introducción a la Programación Orientada a Objetos

Objetos y Clases

En la implementación se escribe el código de cada clase en un lenguaje de programación, manteniendo las relaciones especificadas en el diagrama.

En la ejecución del programa se crean objetos de software que son instancias de una clase

En esta etapa una clase puede pensarse como un generador a partir del cual se crean objetos de software.

Introducción a la Programación Orientada a Objetos

Objetos y Clases

Un lenguaje de modelado permite construir distintos tipos de diagramas para describir diferentes aspectos de un sistema de software.

Es una herramienta muy útil para las etapas de diseño e implementación de programas y también para la documentación.

Un diagrama de clases permite especificar la estructura de un sistema en función de las clases que lo componen.

Introducción a la Programación Orientada a Objetos

Diagrama de clases

Las clases son dibujadas como rectángulos conformados por:

Nombre de la clase

Atributos de las instancias

Servicios

Responsabilidades

Comentarios

Introducción a la Programación Orientada a Objetos

Diagrama de clases

Atributos de la clase

Cada atributo va a estar asociado a un tipo.

Los servicios pueden ser constructores, comandos o consultas.

Introducción a la Programación Orientada a Objetos

Por el momento no especificaremos la sección responsabilidades. Usaremos los comentarios para especificar responsabilidades de la clase y de cada servicio.

El diseño puede completarse con elementos adicionales como por ejemplo los casos de prueba.

Diagrama de clases

Introducción a la Programación Orientada a Objetos

Caso de Estudio:Ciudad

El Ministerio de Educación de una provincia mantiene datos que le permiten obtener información demográfica. El sistema está conformado por varias clases, una de las cuales permite modelar a cada ciudad de la provincia.

Cada ciudad se modela a través de atributos Código Postal, población actual, superficie medida en kilómetros cuadrados y la densidad. Este último valor se obtiene como el cociente entre la población y la superficie de la ciudad.

Introducción a la Programación Orientada a Objetos

Caso de Estudio:Ciudad

Ciudad

<<atributos de instancia>>CP: enteropoblacion : enterosuperficie: real

Se asumen valores no negativos

La responsabilidad de controlar que los valores no son negativos se le asigna a las clases que usen a la clase Ciudad.

Atributos

Introducción a la Programación Orientada a Objetos

Caso de Estudio:Ciudad

Un constructor es un servicio provisto por la clase y se caracteriza porque recibe el mismo nombre que la clase.

El constructor se invoca cuando se crea un objeto y permite inicializar los valores de los atributos de instancia.

Una clase puede brindar varios constructores.

Constructores

Introducción a la Programación Orientada a Objetos

Caso de Estudio:Ciudad

Ciudad

<<atributos de instancia>>CP: enteropoblacion : enterosuperficie: real <<constructores>>Ciudad (c : entero)Ciudad(c: entero,p:entero,s:real)

Este diseño especifica que puede crearse una instancia especificando sólo el código postal o especificando el código, la población y la superficie.

Constructores

Introducción a la Programación Orientada a Objetos

Caso de Estudio:Ciudad

Los comandos son servicios que modifican los valores de los atributos.

Por lo general cada clase ofrece un comando para establecer el valor de cada atributo de instancia.

Comandos

Introducción a la Programación Orientada a Objetos

Caso de Estudio:Ciudad

Ciudad

<<atributos de instancia>>CP: enteropoblacion : enterosuperficie: real

Este diseño especifica que pueden modificarse los valores de la población y la superficie.

<<constructores>>…<<comandos>>establecerPoblacion (pob : entero)establecerSuperficie (sup : real)…

Comandos

Introducción a la Programación Orientada a Objetos

Caso de Estudio:Ciudad

Ciudad

<<atributos de instancia>>CP: enteropoblacion : enterosuperficie: real

El comentario describe la funcionalidad del comando.

<<constructores>>…<<comandos>>…aumentarPoblacion (cre : entero)…

Se incrementa la población de acuerdo al valor actual más cre

Comandos

Introducción a la Programación Orientada a Objetos

Las consultas son servicios que computan un valor y devuelven un resultado (getter).

La inversa no es necesariamente válida, es decir que un servicio devuelva un resultado no lo convierte en una consulta.

Por lo general se incluye una consulta para retornar el valor de cada atributo de instancia.

Caso de Estudio:CiudadConsultas

Introducción a la Programación Orientada a Objetos

Caso de Estudio:Ciudad

Ciudad

<<atributos de instancia>>CP: enteropoblacion : enterosuperficie: real <<constructor>>…<<comandos>>…<<consultas>> obtenerCP(): enteroobtenerPoblación() : enteroobtenerSuperficie() : real…

Consultas

Introducción a la Programación Orientada a Objetos

Caso de Estudio:Ciudad

Ciudad

<<atributos de instancia>>CP: enteropoblacion : enterosuperficie: real <<constructor>>…<<comandos>>…<<consultas>> …densidad () : real

cantidad de habitantes por kilómetro cuadrado. Asume superficie mayor que 0.

Consultas

Introducción a la Programación Orientada a Objetos

Caso de Estudio:Ciudad

Este diagrama implica dos decisiones de diseño importantes:

• la densidad no se mantiene como un atributo sino un servicio que calcula un valor a partir de los otros almacenados

• es responsabilidad de la clase que “usa” el servicio densidad invocarlo sólo si la superficie es mayor que 0.

Decisiones de Diseño

class Ciudad {

}

Introducción a la Programación Orientada a Objetos

Caso de Estudio:Ciudad

La implementación en Java de este diagrama consiste en definir una clase Ciudad

Ciudad

Atributos de las instancias

Servicios

Responsabilidades

Atributos de la clase

Implementación en Java

Introducción a la Programación Orientada a Objetos

Caso de Estudio:Ciudad

La palabra class está reservada.

El primer caracter de un identificador debe ser una letra, luego puede estar seguida de otras letras, dígitos, guiones bajos.

Java es sensible a mayúsculas y minúsculas.

Las llaves { } delimitan la definición de la clase. En su interior se definen los atributos y servicios que caracterizan a la clase.

Otros delimitadores cuyo significado iremos viendo son los corchetes, paréntesis, comas, puntos y puntos y comas.

Implementación en Java

Cada atributo va a quedar asociado a un variable o atributo de instancia.

Introducción a la Programación Orientada a Objetos

class Ciudad { private int CP; private int poblacion; private float superficie;}

Caso de Estudio:Ciudad

Ciudad

<<atributos de instancia>>CP: enteropoblacion : enterosuperficie: real

Implementación en Java

Los comentarios se denotan con:

// para comentarios de una línea

/* */ para delimitar comentarios de varias líneas

Java es libre de la línea. El ; es terminador de instrucción.

Introducción a la Programación Orientada a Objetos

La palabra reservada private es un modificador, indica que el alcance de las tres variables es la clase completa.

Caso de Estudio:CiudadImplementación en Java

Si bien Java no exige que las declaraciones aparezcan antes del código, adoptaremos la convención de escribir los atributos antes que los servicios.

Cada variable tiene asociado un tipo.

Los tipos int y float son tipos elementales.

Introducción a la Programación Orientada a Objetos

Caso de Estudio:Ciudad

Un tipo elemental determina un conjunto de valores atómicos y un conjunto de operaciones que se aplican sobre estos valores.

En ejecución, una variable de un tipo elemental mantiene un valor que corresponde al tipo y participa en las operaciones establecidas por su tipo.

Implementación en Java

Introducción a la Programación Orientada a Objetos

public Ciudad ( int c) { CP = c;}

Caso de Estudio:Ciudad

Ciudad

<<constructores>>Ciudad (c : entero)

Un constructor es un servicio que se invoca cuando se crea un objeto de clase Ciudad.

Constructores en Java

Introducción a la Programación Orientada a Objetos

public Ciudad(int c,int p,float s) { CP = c; poblacion = p; superficie = s; }

Caso de Estudio:Ciudad

Ciudad

<<constructores>>Ciudad (c : entero)Ciudad (c : entero, p: entero, s: real)

Constructores en Java

Introducción a la Programación Orientada a Objetos

Caso de Estudio:Ciudad

El primer constructor recibe un parámetro.

El pasaje de parámetros en Java es por valor.

El valor de la variable c se asigna a la variable CP, que es un atributo de instancia.

Las otras dos variables se inicializan con valores por omisión establecidos de acuerdo al tipo.

Constructores en Java

Introducción a la Programación Orientada a Objetos

Caso de Estudio:Ciudad

El segundo constructor va a invocarse cuando se cree un objeto de clase Ciudad y se establezcan los valores iniciales de los tres atributos de instancia.

Este constructor recibe tres parámetros.

El nombre Ciudad está sobrecargado.

Constructores en Java

Introducción a la Programación Orientada a Objetos

Si una clase brinda varios constructores el número o tipo de parámetros debe ser diferente en cada uno.

Si en una clase no se define explícitamente un constructor, el compilador crea automáticamente uno.

Si la clase incluye uno o más constructores, el compilador no agrega ningún otro implícitamente.

Caso de Estudio:CiudadConstructores en Java

Introducción a la Programación Orientada a Objetos

Caso de Estudio:Ciudad

Ciudad

<<comandos>>establecerPoblación (p : entero)

public void establecerPoblacion(int p) { poblacion = p ;}

La palabra void indica que el método no retorna un valor.

En Java los comandos y consultas se llaman métodos.

Comandos y Consultas en Java

Introducción a la Programación Orientada a Objetos

Caso de Estudio:Ciudad

Ciudad

<<comandos>>aumentarPoblación (cre : entero)

public void aumentarPoblacion(int cre) {//Se incrementa la población de acuerdo al valor actual más cre

poblacion += cre ;}

Es equivalente a poblacion=poblacion+cre

Se incrementa la población de acuerdo al valor actual más cre

Comandos y Consultas en Java

Introducción a la Programación Orientada a Objetos

Caso de Estudio:Ciudad

Ciudad

<<consultas>>obtenerPoblación (): entero

public int obtenerPoblacion() { return poblacion;}

Comandos y Consultas en Java

Introducción a la Programación Orientada a Objetos

Caso de Estudio:Ciudad

Ciudad

<<consultas>>densidad () :real

public float densidad() { //cantidad … return poblacion/superficie;}

cantidad de habitantes por kilómetro cuadrado. Asume superficie mayor que 0.

Java admite expresiones con operandos de diferentes tipos

Comandos y Consultas en Java

Introducción a la Programación Orientada a Objetos

Contenido de esta clase

Presentación de la materia (objetivos, motivación)

Problemas y Soluciones

El proceso de desarrollo de Software. Etapas

Calidad y Productividad

Programación Orientada a Objetos.

Objetos y Clases

Atributos y Servicios

Constructores, Comandos y Consultas

Implementación de Clases en Java

Introducción a la Programación Orientada a Objetos

Contenido de la próxima clase

Objetos y Clases

Atributos de instancia y de clase

Servicios. Constructores, Comandos y Consultas

Modificadores de acceso

Creación y comunicación entre objetos.

Implementación y Verificación de una Clase en Java

Tester con valores establecidos

Alternativas de diseño para Cuenta Bancaria