





Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Prepara tus exámenes
Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Prepara tus exámenes con los documentos que comparten otros estudiantes como tú en Docsity
Encuentra los documentos específicos para los exámenes de tu universidad
Estudia con lecciones y exámenes resueltos basados en los programas académicos de las mejores universidades
Responde a preguntas de exámenes reales y pon a prueba tu preparación
Consigue puntos base para descargar
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Comunidad
Pide ayuda a la comunidad y resuelve tus dudas de estudio
Ebooks gratuitos
Descarga nuestras guías gratuitas sobre técnicas de estudio, métodos para controlar la ansiedad y consejos para la tesis preparadas por los tutores de Docsity
Asignatura: Laboratorio de Tecnologia de Objetos (LTO), Profesor: Francisco Duran, Carrera: I.T.I. Sistemas, Universidad: UMA
Tipo: Apuntes
1 / 9
Esta página no es visible en la vista previa
¡No te pierdas las partes importantes!






Laboratorio de Tecnología de Objetos I-
9 Introd. a la POO El lenguaje Java Estruct. Biblioteca Excepciones Colecciones Entrada y salida GUIs
Índice
Laboratorio de Tecnología de Objetos I-
B S T R A C C I Ó N O P E R A C I O N A L
A B S T R A C C I Ó N
D E
D A T O S
Lenguajes Máquina / Ensamblador
Cód.Inst.Simb. Macros
Id = Dir Mem. Manip.Total de Datos
Subrutinas FORTRAN Funciones
Id. Simb. Tipos Oper. restring.
Anidamiento PASCAL Subprogramas
Registros Tipos definidos Gest. Din. Mem
MODULA- ADA
Encapsulam. Octult. Inform. Espec - Impl
Tipo Abstracto de Datos
Lenguajes Orientados a Objetos
Métodos Objetos Mensajes
Laboratorio de Tecnología de Objetos I-
AB TS R AC CI ÓN OP ER AC I ON AL
A B S TR A C C I ÓN
D E DA T O S
Lenguajes Máquina / Ensamblador
Cód.Inst.Simb. Macros
Id = Dir Mem. Manip.Total de Datos SubrutinasFunciones FORTRAN Id. Simb. Tipos Oper. restring.
SubprogramasAnidamiento PASCAL
Registros Tipos definidos Gest. Din. Mem MODULA- ADA
Encapsulam. Octult. Inform. Espec - Impl
Tipo Abstracto de Datos Lenguajes Orientados a Objetos
Métodos Mensajes Objetos
IDLs Invocación remota Componentes
Laboratorio de Tecnología de Objetos I-
CORRECCIÓN
EXTENSIBILIDAD
COMPATIBILIDAD
REUTILIZACIÓN
ROBUSTEZ
Descomposición y Refinamientos
Modularidad
Interfaces Explícitas
Unidad Modular Lingüíst
Ocultación Informac.
Pocas interfaces
Interfaces pequeñas
9 Criterio de Modularización 9 Estado + Comportamiento 9 Entidad estática (en general)
9 Objeto (Clase) = Valor (Tipo) 9 Entidad dinámica 9 Cada objeto tiene su propio estado 9 Objetos de una clase comparten su comportamiento
Laboratorio de Tecnología de Objetos I-
Laboratorio de Tecnología de Objetos I-
(Punto) x = 1 y = 3
(Punto) x = 2 y = 2
Punto
x, y: double trasladar(a, b) distancia(pto)
Estado
Comportamiento
pto.trasladar(1, -1) pto
Laboratorio de Tecnología de Objetos I-
Laboratorio de Tecnología de Objetos I-
class Punto { private double x, y; public Punto() { x = y = 0; } public Punto(double a, double b) { x = a; y = b; } public double abscisa() {return x;} public double ordenada() {return y;} public void abscisa(double a){ x = a; } public void ordenada(double b){ y = b; } public void trasladar(double a, double b) { x += a; y += b; } public double distancia(Punto pto) { return Math.sqrt(Math.pow(x - pto.x, 2) + Math.pow(y - pto.y, 2)); } }
Java
Laboratorio de Tecnología de Objetos I-
Exception
IOException
Laboratorio de Tecnología de Objetos I-
Java
class Punto { private double x, y;
public Punto() { x = y = 0; } public Punto(double a, double b) { x = a; y = b; } public double abscisa() { return x; } public double ordenada() { return y; } public void abscisa(double a){ x = a; } public void ordenada(double b){ y = b; } public void trasladar(double a, double b) { x += a; y += b; } public double distancia(Punto pto) { return Math.sqrt(Math.pow(x - pto.x, 2)
Laboratorio de Tecnología de Objetos I-
Laboratorio de Tecnología de Objetos I-
Eiffel
Laboratorio de Tecnología de Objetos I-
Eiffel
Laboratorio de Tecnología de Objetos I-
Object subclass: #Punto instanceVariableNames: ‘ x y ’ classVariableNames: " poolDictionaries: " origen ^(self new) abscisa: 0; ordenada: 0 x: unNum y: otroNum ^(self origen) tras: unNum ladar: otroNum abscisa ^x ordenada ^y abscisa: unNum x := unNum ordenada: unNum y := unNum tras: unNum ladar: otroNum x := x + unNum. y := y + otroNum distancia: unPunto ^ ((x - unPunto abscisa) squared + (y - unPunto ordenada) squared) sqrt
Smalltalk
Laboratorio de Tecnología de Objetos I-
Smalltalk
Laboratorio de Tecnología de Objetos I-
Pensionista TrabajadorActivo
MedioPensionista
elAbuelo: MedioPensionista
Pensionista
pensión
calcularIRPF( ): short
TrabajadorActivo
salario
calcularIRPF( ): short
calcularIRPF( )
Pensionista TrabajadorActivo
MedioPensionista
Persona nombre:String
pensión: Float salario: Float
elAbuelo: MedioPensionista Pensionista::nombre TrabajadorActivo::nombre pensión salario
Laboratorio de Tecnología de Objetos I-
¾ El tipo dinámico debe ser descendiente del tipo estático.
¾ En Java, Eiffel y Smalltalk, cualquier variable es una referencia a un objeto. ¾ En C++ se distingue entre objetos y punteros a objetos. El polimorfismo sólo se puede aplicar a estos últimos.
Laboratorio de Tecnología de Objetos I-
¾ asignaciones explícitas entre objetos, ¾ paso de parámetros, ¾ devolución de resultado en una función.
Laboratorio de Tecnología de Objetos I-
Java
(Partícula) x = 0 y = 0 m = 2
(Punto) x = 0 y = 0
(Partícula) x = 0 y = 0
m = ??
Laboratorio de Tecnología de Objetos I-
(Particula) x = 0 y = 0 m = 2
(Punto) x = 0 y = 0
(Particula) x = 0 y = 0 m = ??
Polígono
Cuadrado
perímetro{^...}
perímetro{^4*lado}
:Polígono
:Cuadrado
obj : Polígono
perímetro?
¾ La invocación del método que ha de resolver un mensaje se retrasa al tiempo de ejecución, y se hace depender del tipo dinámico del objeto receptor.
¾ No obstante, algunos de ellos (C++) necesitan etiquetar de forma explícita las funciones que han de resolverse dinámicamente: funciones virtual.
double excesoX, excesoY; excesoX = (abscisa()+a-esquinaI.abscisa()) % ancho(); excesoY = (ordenada()+b-esquinaI.ordenada()) % alto(); abscisa(excesoX + (excesoX>0? esquinaI.abscisa() : esquinaD.abscisa())); ordenada(excesoY + (excesoY>0? esquinaI.ordenada() : esquinaD.ordenada())); } }
Java
Laboratorio de Tecnología de Objetos I-
PuntoAcotado pac = new PuntoAcotado(eI, eD);
PuntoAcotado x= 0 y= 0
x = 1 y = 1
Java
Punto pto;
pto = pac; pto.trasladar(3, 3);
trasladar(3,
class Punto { private double x, y; public Punto() { … } … public void trasladar(double a, double b) { x += a; y += b; } public double distancia(Punto p) { … } };
Punto eI = new Punto(0,0); Punto eD = new Punto(2,2);
Laboratorio de Tecnología de Objetos I-
void Particula::trasladar(double a, double b) { double excesoX, excesoY; excesoX = (abscisa()+a-esquinaI.abscisa()) % ancho(); excesoY = (ordenada()+b-esquinaI.ordenada()) % alto(); if (excesoX > 0) incX = esquinaI.abscisa(); else incX = esquinaD.abscisa(); if (excesoY > 0) incY = esquinaI.ordenada(); else incY = esquinaD.ordenada(); abscisa(excesoX + incX); ordenada(excesoY + incY); }
Laboratorio de Tecnología de Objetos I-
Punto *ppto; PuntoAcotado *ppac = new PuntoAcotado(eI, eD);
PuntoAcotado x= 0 y= 0
ppto = ppac;
ppto->trasladar(3, 3);
trasladar(3,
PuntoAcotado x= 3 y= 3
class Punto { double x, y; public: Punto(); Punto(double a, double b); ~Punto(); … void trasladar(double a, double b); double distancia(Punto& pp); };
Punto *eI = new Punto(0,0); Punto *eD = new Punto(2,2);
Laboratorio de Tecnología de Objetos I-
Punto *ppto; PuntoAcotado *ppac = new PuntoAcotado(eI, eD);
PuntoAcotado x= 0 y= 0
ppto = ppac; ppto->trasladar(3, 3);
trasladar(3,
PuntoAcotado x= 1 y= 1
class Punto { double x, y; public: Punto(); Punto(double a, double b); ~Punto(); … void trasladar(double a, double b); double distancia(Punto& pp); };
Punto *eI = new Punto(0,0); Punto *eD = new Punto(2,2);
virtual
abstract class Polígono { private Punto vértices[]; public void trasladar(double a, double b){ for (int i = 0; i < vértices.length; i++) vértices[i].trasladar(a, b); } public double perímetro() { double per = 0; for (int i = 1; i < vértices.length; i++) per = per + vértices[i-1].distancia(vértices[i]); return per
Java CLASE ABSTRACTA