Abstracción El concepto de abstracción es esencial en ciencias de la computación. Un programa es en sí mismo una abstracción, un modelo de la resolución.

Slides:



Advertisements
Presentaciones similares
Curso de java básico (scjp)
Advertisements

Curso de Java Capitulo 7: Conceptos sobre poo Profesor:
Lenguaje de programación Java
Clases Extendidas La clase extendida hereda los campos y métodos de la clase de la cual extiende. La clase original se conoce como superclase y la clase.
Arquitectura CLARO-TECNOTREE
Programación Orientada a Objetos
El proceso de desarrollo de software
El Proceso de desarrollo de software
Problema abstracción DATOS ACCIONES Problemas y Programas Programa.
El proceso de desarrollo de software
Abstracciones y Modelos
El proceso de desarrollo de software
La Programación Orientado a Objetos
Tipo de Dato Abstracto Tipos de datos:
Aplicación del paradigma orientado a objetos
Diseño y programación de
Relaciones entre Clases La construcción de un sistema de software orientado a objetos consiste en definir un conjunto de clases relacionadas entre sí.
Encapsulamiento y Abstracción
Abstracción de Datos La abstracción es un recurso fundamental en la programación orientada a objetos y está además fuertemente ligado a reusabilidad.
Programación Orientada a Objetos en Java
El concepto de clase Con frecuencia un término puede definirse de diferentes maneras según el enfoque. Desde el punto de vista del análisis y el diseño.
PROGRAMACIÓN EN JAVA Curso-taller inicial de programación en JAVA Facultad de Estadística e Informática TEMA II.
Tema 7: Polimorfismo Antonio J. Sierra. Índice Introducción. Sobrecarga de métodos. Objetos como parámetros. Paso de argumentos. Devolución de objetos.
Lic. Rosemary Torrico Bascopé
UNIVERSIDAD TECNOLÓGICA DE HERMOSILLO T.S.U. EN T.I.C., Área: Sistemas Informáticos Ing. José Padilla Duarte y estudiantes de Sistemas Informáticos Hermosillo,
PROGRAMACIÓN ORIENTADA A OBJETOS
Clases y objetos La unidad fundamental de programación OO son las clases. Conjunto de métodos y semántica Qué se va a hacer POO Clase: que define la implementación.
Tema 6: Clases Antonio J. Sierra.
SCJP Sun Certified Programmer for Java 6
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Objetos.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Encapsulamiento.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Encapsulamiento.
Herramientas de polimorfismo y herencia en C++
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Clases.
Ivette C. Martínez - Héctor Palacios Java – Modulo 1 Introducción y Fundamentos del lenguaje de programación Java.
Herencia. Introducción La idea básica es poder crear clases basadas en clases ya existentes. Cuando heredamos de una clase existente, estamos re-usando.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Genericidad.
Programación Orientada a Objeto
Detalles Generales sobre Java
Introducción a la Programación Orientada a Objetos Una clase que modela los atributos y el comportamiento de una colección de objetos, define un tipo de.
:: Prof. Yeniffer Peña Programación I Programación Orientada a Objetos Presentación.
Ing. Esp. Ricardo Cujar. Programación Orientada a Objetos  Modelo de desarrollo de software.  Modo de pensar del hombre y no de la máquina.  Abstracción.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Polimorfismo.
Universidad Tecnológica de Izúcar de Matamoros Programa Educativo: Tecnologías de la Información Asignatura: Base de datos para aplicaciones Tema: Base.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Abstracción.
M.C. Pedro Bello López 1 IMPLEMENTACIÓN. M.C. Pedro Bello López2.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Caso.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS GUI.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Tipo.
Programación Orientada a Objetos: CLASES Y OBJETOS
Herencias Conceptos básicos i
Programación orientada a objetos La programación orientada a objetos o POO (OOP según sus siglas en inglés) es un paradigma de programación que usa objetos.
Prof. Manuel B. Sánchez. Un paradigma de programación representa un enfoque particular o filosofía para la construcción del software. No es mejor uno.
Diferencia entre implementar en RPA e IPOO - Diseño En.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS GUI.
Estructuras de control selectivas Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión Práctica 3.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Asociación.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Objetos.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Encapsulamiento.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Objetos.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Herencia.
Introducción a la Programación Orientada a Objetos (POO) Conceptos de clase, objeto e interfaz. Atributos y métodos Fundamentos de Programación Departamento.
Introducción a la Programación Orientada a Objetos Sonia Rueda Encapsulamiento y Abstracción Departamento de Ciencias e Ingeniería de la Computación UNIVERSIDAD.
Introducción a la Programación Orientada a Objetos Sonia Rueda Encapsulamiento y Abstracción Departamento de Ciencias e Ingeniería de la Computación UNIVERSIDAD.
IPOO 2 cuatrimestre 2015 Departamento de Ciencias e Ingeniería
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
IPOO 2 cuatrimestre 2018 Departamento de Ciencias e Ingeniería
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
Transcripción de la presentación:

Abstracción El concepto de abstracción es esencial en ciencias de la computación. Un programa es en sí mismo una abstracción, un modelo de la resolución de un problema. Un lenguaje de programación es también una abstracción; la computadora no ejecuta directamente las instrucciones escritas en un lenguaje como Java, el repertorio de instrucciones que brinda la máquina es mucho más simple y reducido. El lenguaje de programación brinda una visión abstracta de la computadora y de los dispositivos que la conforman, en particular la memoria.

Abstracción Todo lenguaje de programación de alto nivel soporta cierto nivel de abstracción en el concepto de tipo de dato. Cuando un lenguaje brinda, por ejemplo, el tipo de dato float, el programador puede usar un conjunto de facilidades sin acceder a la implementación concreta. Conoce el rango de valores que una variable de tipo float puede tomar, conoce las operaciones provistas por el tipo, pero no conoce la representación interna en memoria de una variable, ni el código específico de cada operación.

Abstracción y POO En la programación orientada a objetos el mecanismo de modularización es la clase. En la etapa de implementación, una clase es una unidad de programación. Las clases se vinculan entre sí través de relaciones de asociación, dependencia y herencia. Un lenguaje que soporta abstracción debe brindar algún mecanismo para que el programador pueda, no sólo utilizar, sino también definir módulos de software independientes.

Abstracción y POO Una clase puede usarse para definir un tipo de dato a partir del cual es posible crear instancias en ejecución. Si la representación de los atributos está encapsulada, el tipo de dato es abstracto, porque las instancias se crean sin conocer cómo es la representación del estado interno ni la implementación de las operaciones. El concepto de abstracción está entonces fuertemente ligado al de encapsulamiento.

Abstracción y Encapsulamiento El encapsulamiento es mecanismo que permite esconder los detalles de la implementación de un módulo, de modo que sus clientes sólo conozcan su funcionalidad. Cada módulo es utilizado como una “caja negra”, esto es, sabiendo qué hace sin saber cómo lo hace. Se reducen así las dependencias entre diferentes módulos de software, cada uno de los cuales es más fácil de leer, verificar y modificar.

TDA Un tipo de dato define un conjunto de operaciones que se aplican sobre un conjunto de valores. Un tipo de dato abstracto (TDA) es un tipo de dato en el cual la representación de los datos y la implementación de las operaciones está encapsulada. Es posible crear instancias del tipo y usar las operaciones conociendo qué hacen, pero no cómo lo hacen.

Caso de Estudio: Punto Punto > x,y:real > Punto(X,Y:real) > copy (p:Punto) establecerX(x:real) establecerY(y:real) > obtenerX():real obtenerY():real equals(p:Punto):boolean distancia(p:Punto):real clone():Punto toString():String

Caso de Estudio: Punto Punto > x,y:real > Punto(x,y:real) class Punto{ //Atributos de Instancia private float x,y; //Constructores public Punto (float x,float y){ this.x = x; this.y = y; }

Caso de Estudio: Punto Punto > x,y:real > copy (p:Punto) establecerX(x:real) establecerY(y:real) public establecerX (float x){ this.x = x; } public establecerY (float y){ this.x = Y; } public void copy (Punto p){ x = p.obtenerX(); y = p.obtenerY(); }

Caso de Estudio: Punto Punto > x,y:real > obtenerX():real obtenerY():real //Consultas public float obtenerX(){ return x; } public float obtenerY(){ return y; }

Caso de Estudio: Punto Punto > x,y:real > … distancia(p:Punto):real //Consultas … public double distancia(Punto p) { float dx= x - p.obtenerX(); float dy= y - p.obtenerY(); return Math.sqrt(dx*dx+dy*dy); }

Caso de Estudio: Punto Punto > x,y:real > … equals(p:Punto):boolean clone():Punto toString():String public boolean equals (Punto p){ return x==p.obtenerX() && y==p.obtenerY(); } public Punto clone(){ return new Punto(x,y); } public String toString(){ return "("+x+","+y+")"; }

Las clases Punto define un tipo de dato abstracto. Define un conjunto de valores, todos los pares de números reales y un conjunto de operaciones que corresponden a los servicios provistos por la clase. La clase Punto va a ser construida y verificada sin necesidad de conocer a sus clases cliente. Caso de Estudio: Punto

Caso de Estudio: Circulo Circulo > pi:real > radio:real punto:Punto > Circulo(r:real,p:Punto) > trasladar(p:Punto) escalar(r:real) copy (c: Circulo) > obtenerCentro():Punto obtenerRadio():real area():real perimetro():real equals(c:Circulo):boolean clone():Circulo Punto > x,y:real > Punto(X,Y:real) > copy (p:Punto) establecerX(x:real) establecerY(y:real) > obtenerX():real obtenerY():real equals(p:Punto):boolean distancia(p:Punto):real clone():Punto toString():String

Las clases Circulo y Punto están relacionadas por asociación. La clase Circulo tiene un atributo de clase Punto. El constructor de Circulo y el método trasladar reciben un parámetro de clase Punto. El método obtenerCentro () retorna como resultado un objeto de clase Punto. Existe también una relación de dependencia entre Circulo y Punto. Caso de Estudio: Circulo

Circulo > pi:real > radio:real punto:Punto > Circulo(r:real,p:Punto) > trasladar(p:Punto) escalar(r:real) copy (c: Circulo) class Circulo { //Atributo de clase private static final float pi=3.1415; //Atributos de Instancia private float radio; private Punto centro; //Constructor public Circulo (float r, Punto p){ radio = r; centro = p; } //Comandos public void trasladar(Punto p){ centro = p; } public void escalar(float r){ radio = r; }

Caso de Estudio: Circulo Circulo > pi:real > radio:real punto:Punto > Circulo(r:real,p:Punto) > trasladar(p:Punto) escalar(r:real) copy (c: Circulo) > obtenerCentro():Punto obtenerRadio():real area():real perimetro():real //Consultas public Punto obtenerCentro(){ return centro; } public float obtenerRadio(){ return radio; } public double perimetro(){ return pi * 2 *radio; } public double area(){ return pi * radio * radio; }

Caso de Estudio: Circulo Circulo > pi:real > radio:real punto:Punto > Circulo(r:real,p:Punto) > trasladar(p:Punto) escalar(r:real) copy (c: Circulo) > obtenerCentro():Punto obtenerRadio():real area():real perimetro():real equals(c:Circulo):boolean clone():Circulo //Consultas public Punto obtenerCentro(){ return centro; } public float obtenerRadio(){ return radio; } public double perimetro(){ return pi * 2 *radio; } public double area(){ return pi * radio * radio; }

La clase Circulo usa los servicios provistos por la clase Punto sin conocer la representación del conjunto de valores ni la implementación de las operaciones. Caso de Estudio: Circulo

class Geometria{ … public void Figuras(){ Punto p1,p2; Circulo c1,c2,c3; p1=new Punto(1,2); p2=new Punto(1,2); c1=new Circulo(7.5,p1); c2=new Circulo(7.5,p2); c3=new Circulo(7.5,p2); if (c3.equals(c1)) System.out.println(“c3 igual a c1”); if (c3.equals(c2)) System.out.println(“c3 igual a c2”); } } Caso de Estudio: Circulo

public boolean equals(Circulo c){ return radio == c.obtenerRadio() && centro == c.obtenerCentro(); } Igualdad superficial, el operador relacional compara referencias p1=new Punto(1,2); p2=new Punto(1,2); c1=new Circulo(7.5,p1); c2=new Circulo(7.5,p2); c3=new Circulo(7.5,p2); p1 y p2 tiene el mismo estado interno pero distinta identidad

Caso de Estudio: Circulo public boolean equals(Circulo c){ return radio == c.obtenerRadio() && centro.equals(c.obtenerCentro()); } Igualdad profundidad, compara los estados internos. p1=new Punto(1,2); p2=new Punto(1,2); c1=new Circulo(7.5,p1); c2=new Circulo(7.5,p2); c3=new Circulo(7.5,p2); NOTEMOS QUE NO ES UNA LLAMADA RECURSIVA

Caso de Estudio: Circulo public void copy (Circulo c){ radio = c.obtenerRadio(); centro = c.obtenerCentro(); } Copy superficial, asigna referencias.

Caso de Estudio: Circulo public void copy (Circulo c){ radio = c.obtenerRadio(); centro.copy(c.obtenerCentro()); } Copy en profundidad, el punto tiene el mismo estado interno que el punto del círculo que pasó como parámetro, pero no la misma identidad.

Caso de Estudio: Circulo public Circulo clone (){ return new Circulo (radio,centro); } Clone superficial, asigna referencias.

Caso de Estudio: Circulo public Circulo clone (){ return new Circulo (radio, centro.clone()); } Clone en profundidad, crea un nuevo círculo con el centro con el mismo estado interno que el objeto que recibe el mensaje, pero otra identidad.

La clase Circulo también define un tipo de dato abstracto a partir del cual es posible crear instancias. La representación del conjunto de valores y la implementación de las operaciones queda escondida dentro de la clase. El diseño y la implementación pueden cambiar y el cambio no será visible para las clases cliente, en tanto la interface siga siendo la misma. Caso de Estudio: Circulo

Circulo > pi:real > centro:Punto punto:Punto > Circulo(r:real,p:Punto) El constructor sigue recibiendo como parámetro el punto que denota el centro y el radio. El código del constructor cambia, asigna el segundo parámetro al atributo centro y computa el atributo punto, calculando un punto cualquiera de la circunferencia con radio r. La interface no cambia. Todos los servicios mantienen la signatura. Las clases que usan a Circulo no perciben el cambio en el diseño.

Caso de Estudio: Circulo Circulo > pi:real > centro:Punto punto:Punto > Circulo(r:real,p:Punto) > trasladar(p:Punto) escalar(r:real) El comando trasladar modifica el centro, pero también tiene que modificar punto, para que el círculo mantenga el mismo radio. El comando escalar recibe el radio y debe computar nuevamente el valor del atributo punto.

Caso de Estudio: Circulo Circulo > pi:real > centro:Punto punto:Punto > Circulo(r:real,p:Punto) > trasladar(p:Punto) escalar(r:real) copy (c: Circulo) > obtenerCentro():Punto obtenerRadio():real area():real perimetro():real equals(c:Circulo):boolean clone():Circulo //Consultas public float obtenerRadio(){ return centro.distancia(punto); } El radio ya no es un atributo, se computa a partir de la distancia entre los puntos.

Caso de Estudio: Circulo Circulo > pi:real > centro:Punto punto:Punto > Circulo(r:real,p:Punto) > trasladar(p:Punto) escalar(r:real) copy (c: Circulo) > obtenerCentro():Punto obtenerRadio():real area():real perimetro():real equals(c:Circulo):boolean clone():Circulo //Consultas public Punto obtenerCentro(){ return centro; } public double perimetro(){ return pi*2*obtenerRadio(); } public double area(){ float r = obtenerRadio() return pi*r*r; } El radio debe computarse cada vez que se usa

Si los atributos no estuvieran encapsulados, las clases clientes podrían acceder directamente al radio. Al cambiar la representación del círculo, sería necesario cambiar el código de todas las clases cliente. Complete la implementación de esta alternativa de diseño para la clase círculo. Caso de Estudio: Circulo