Conceptos Programacion orientada a objetos

40
Conceptos de Programación Orientada a Objetos OOP (Object Oriented Programming) Profesor M. C. Enrique Alejandro López López Revisión 2010

description

conceptos

Transcript of Conceptos Programacion orientada a objetos

Page 1: Conceptos Programacion orientada a objetos

Conceptos de

Programación Orientada a Objetos OOP

(Object Oriented Programming)

Profesor

M. C. Enrique Alejandro López López

Revisión 2010

Page 2: Conceptos Programacion orientada a objetos

1. Introducción

• Paradigmas de Programación

• Paradigma Orientado a objetos

• Tipo Abstracto de Datos

• Conceptos básicos de POO: Clase, Objeto, Mensaje, Clase Abstracta y Tipo Genérico

• Otros conceptos de POO: Composición, Herencia, Herencia Múltiple y polimorfismo

• Elementos del lenguaje de programación: operadores, palabras reservadas, estructuras de control 

Contenido 2

Page 3: Conceptos Programacion orientada a objetos

3. Implementación de clases (Java y C++)3. Encapsulamiento de información 4. Constructores y destructores5. Métodos de acceso y de utilería 6. Definición y operaciones de una cola7. Sobrecarga de métodos8. Miembros estáticos  

4. Implementación de Composición, herencia y polimorfismo (Java y C++)3. Composición4. Herencia5. Clase abstracta6. Polimorfismo

Contenido 3

Page 4: Conceptos Programacion orientada a objetos

2. Elementos del lenguaje de programación (Java y C++)• Palabras reservadas

• Tipos de datos simples

• Estructuras de control

• Operadores: Aritméticos, Lógicos, de Relación, de Asignación, de incremento, de nivel de bits.

• Operadores exclusivos de C++ y operadores exclusivos de Java

• Métodos

• Arreglos de una dimensión (vectores) y de dos dimensiones Matrices

Contenido 4

Page 5: Conceptos Programacion orientada a objetos

Programación Orientada a Objetos (Object Oriented Programming OOP)

Bibliografía

1. Thinking in Java. Eckel,Bruce, Prentice Hall, Tercera Edición, 2003.

2. Thinking in C++. Eckel,Bruce, Prentice Hall, Segunda Edición, 2000.

3. Introduction to Object-Oriented Programming Using C++, Peter Müller, Globewide Network Academy, 1997.

4. Programación Orientada a Objetos. Joyanes Aguilar, Luis; Graw-Hill, Segunda Edición, 1998.

1 Libros disponibles en www.bruceEckel.com2 Libro disponible en www.gnacademy.org

5

Page 6: Conceptos Programacion orientada a objetos

1. Introducción a la POO

• Paradigma es un conjunto de teorías, estándar y métodos que juntos representan un medio de organización del conocimiento: es decir, es un medio de visualizar el mundo (Kuhn).

• Un paradigma de programación representa un enfoque particular o filosofía para la construcción del software.

Clasificación de Lenguajes de programación de acuerdo al paradigma.

• Imperativos Son los lenguajes que dan instrucciones a la computadora, es decir, órdenes.más apegado al modelo de la máquina: Fortran, Pascal, C, etc.

• Funcionales Son los lenguajes basados en el concepto de función matemática.

función no como el concepto de subprograma: Lisp, Haskell, Erlang, etc.

• Lógicos Son los lenguajes los que se basan en la teoría lógica de primer orden La aplicación de reglas, hipótesis, axiomas y teoremas: Prolog, Mercury, ALF, etc.

• Orientados a Objetos. Son los lenguajes que permiten implementar conceptos como objeto, clase, mensaje, herencia, polimorfismo, etc: C++, Java, C#, etc.

• Estructurado, Concurrentes, Distribuidos, Paralelos, múltiples paradigmas.

• No existe un estilo de programación idóneo para todas las clases de aplicaciones.

6

Page 7: Conceptos Programacion orientada a objetos

• Lenguajes de programación más populares según TIOBE SOFTWAREhttp://www.tiobe.com/index.php/content/paperinfo/tpci/index.html

71. Introducción a la POO

Page 8: Conceptos Programacion orientada a objetos

• La Programación Orientada a Objetos (POO u OOP) es un paradigma de programación que define los programas en términos de “clases de objetos”. Los objetos son entidades que combinan estado (propiedades o datos), comportamiento (procedimientos o métodos) e identidad (propiedad del objeto que lo diferencia del resto).

8

• Algunas de las causas del desarrollo de las técnicas OO son:

Es una forma natural en que percibimos el mundo.

Adecuada para aplicaciones de prototipos y simulaciones.

La herencia y la encapsulación promueven la reutilización.

La gran cantidad de Lenguajes Orientados a Objetos (LOOP).

Interfaces de usuario gráficas.

Bases de datos orientadas a objetos.

Notaciones orientadas a objetos. (UML)

Tecnologías de componentes. (CORBA, COM, DCOM, ActiveX, etc. middleware )

Proceso de desarrollo de software. (Coad/Yourdon, OOSE Jacobson, OMT Rumbaug, BOOCH-93 Booch, RUP ).

1. Introducción a la POO

Page 9: Conceptos Programacion orientada a objetos

Lenguajes de Programación.

Simula 67 primer LOOP,Hereda de Simula I y Algol 60.

Smalltalk lenguaje puro.Anteriores 72, 74, 76.Smalltalk/V para PC.

C++ uno de los LOOPmás populares

Java un LOOP un fuerteoponente de C++

Otros LOOP: Eifel, Object Pascal,Ada-95, CLOS, Delphi, visual Object, Prolog++, Python, etc.

91. Introducción a la POO

Page 10: Conceptos Programacion orientada a objetos

Lenguajes de Programación.

101. Introducción a la POO

Page 11: Conceptos Programacion orientada a objetos

Ruta de evolución de los lenguajes de programación:

Programación No estructurada

ProgramaciónProcedimental

ProgramaciónModular

ProgramaciónOO

MainProgram

Procedure

Datos Globales

111. Introducción a la POO

Page 12: Conceptos Programacion orientada a objetos

Tipos Abstractos de Datos (ADT Abstract Data Types)

2. Conceptos Básicos de la POO. 12

Abstracción es el proceso que permite distinguir los detalles esenciales de los no esenciales de un problema determinado.

Permite tratar la complejidad (modelo)

Modelo define una perspectiva abstracta (datos y operaciones)

Los alumnos son personascaracterizadas por muchas propiedades:

• Nombre• Estatura• Fecha de nacimiento• Matricula• Color de los ojos• Preferencia sexual, Etc.

• Nombre• Matricula• Fecha de nacimiento, Etc.

alumno abstractoPropiedades especificasdel problema

Datos delModelo

Page 13: Conceptos Programacion orientada a objetos

La pura descripción (datos) del alumno abstracto no es suficiente, se deben definir una serie de operaciones que permitan manipular a los alumnos abstractos.

Operaciones:

• Crear alumno,• borrar alumno,• Obtener matricula, • Obtener estado académico, Etc.

El acceso a los datos debe ser posible únicamente con las operaciones asociadas. (estado valido)

ADT: Alumno

Datos

Operaciones

Un tipo TAD es puede definir como un conjunto de valores sobre los que se aplican un conjunto dado de operaciones que cumplen determinadas propiedades.

Un TAD define un modelo matemático de podría ser implementado en algún lenguaje de programación.

La definición de un TAD no está relacionada en absoluto con los detalle de la implementación. Tal vez ni siquiera sea posible implementar un TAD particular en algún software o hardware .

Tipos Abstractos de Datos (ADT Abstract Data Types)

2. Conceptos Básicos de la POO. 13

Page 14: Conceptos Programacion orientada a objetos

Un TAD cumple con las siguientes propiedades:

1.Exporta un tipo. (crear instancias)

2.Exporta un conjunto de operaciones, llamado interface. (manipular instancias)

3.La interface es el único mecanismo de acceso a los datos. (protegerlos datos)

4. Axiomas. (condiciones que debe cumplir)

TDA Integer Datos Una secuencia de dígitos que opcionalmente presentan como prefijo un signo más o un signo menos. Nos referimos a este número entero con signo como N. Operaciones Constructor Crea un nuevo integer y lo inicializa a cero. Add(k) Crea un nuevo integer, suma de N y k. Sub(k) Crea un nuevo integer, diferencia de N y k Set(k) Pone a N lo que vale k. . . . Destructor Elimina entero End

Tipos Abstractos de Datos (ADT Abstract Data Types)

2. Conceptos Básicos de la POO. 14

Page 15: Conceptos Programacion orientada a objetos

Tipos Abstractos de Datos (ADT Abstract Data Types)

2. Conceptos Básicos de la POO. 15

• Constructor describe acciones a ejecutar al crear una instancia.

• Destructor describe acciones que se deben ejecutar al destruir una instancia.

• Independiente del lenguaje.

• La notación de “add” se puede sustituir por “+”

• La OOP es la Programación de ADT’s TDA Vertor Datos:

Una secuencia de enteros referida por Vec, que representa la dirección del primer elemento.Un entero que determina número de elementos, referido por Size

Operaciones:Constructor(tam) crea nuevo Vector reserva memoria para Vec e

inicializa en cero sus elementos, además inicializa Size en el valor de entrada.Ordena( ) ordena los elementos de Vec.Busca(key) revisa si key se encuentra en los elementos de Vec. Si

lo encuentra regresa su posición en Vec sino regresa -1.. . . Destructor elimina la memoria asignada a Vec y elimina el Vector.

End.

Page 16: Conceptos Programacion orientada a objetos

Tipos Abstractos de Datos (ADT Abstract Data Types)

2. Conceptos Básicos de la POO. 16

A la propiedad de ocultar los datos y que solo se puedan acceder por medio de la interface se le llama encapsulamiento. Esta propiedad proporciona las siguientes ventajas

•Protege los datos a no poder accederlos directamente no puede cambiar el comportamiento ni el estado.•Independencia de la estructura de datos interna. •Mantiene un estado válido de los datos.

Por ejemplo: PILA

• La estructura interna puede ser un arreglo o una lista ligada.

• Estado válido del tope (en el primer caso)

• No se permite insertar o eliminar datos en otro lugar que no sea el tope

Los Lenguajes orientados a Objetos LOOP deben permitir la implementación de los ADT’s.El ADT Integer es implementado en lenguajes como C, Pascal, Modula, etc. int i, j, k; /* Define tres integers */i = 1; /* Asigna 1 al integer i */j = 2; /* Asigna 2 al integer j */k = i + j; /* Asigna la suma de (i) y (j) a (k) */

Page 17: Conceptos Programacion orientada a objetos

Tipos Abstractos de Datos (ADT Abstract Data Types)

Tipos Genéricos Abstractos de Datos.

Por ejemplo: Se puede definir el ADT Pila para crear Pilas de carros,

Pilas de platos, Pilas de enteros, etc.

Pila <Enteros> pilaInt

La notación de corchetes angulares denota el tipo deelementos que va a utilizar la Pila.

Los GADT( Generic ADT) se utilizan para definir tipos abstractos de datos que permitan crear instancias del ADT para distintos tipos de elementos.

2. Conceptos Básicos de la POO. 17

Page 18: Conceptos Programacion orientada a objetos

2. Conceptos Básicos de la POO. 18

Clase es una descripción de un conjunto de objetos que comparten los mismos atributos, operaciones, relaciones y semántica.

Una Clase es la implementación de un ADT. Define Atributos y Métodos que implementan la estructura de datos y las operaciones del ADT, respectivamente.

Se puede decir que las clases definen las propiedades y el comportamiento de un conjunto de objetos.

class Integer { attributes: int i methods: Integer( ) //constructor reserva memoria y coloca en cero a i; setValue(int n) Integer addValue(Integer j)

… ~Integer( ) //libera la memoria asignada para i}

Observar como los métodos ya muestran algunos detalles de implementación como los tipos de los parámetros y el tipo de retorno.

Clase

Page 19: Conceptos Programacion orientada a objetos

2. Conceptos Básicos de la POO. 19

ObjetoUn Objeto es una instancia de una clase. Puede ser identificado de forma única

por su nombre y define un estado, el cual es representado por los valores de sus atributos en un momento en particular.

Por ejemplo en el caso anterior. Integer a, b, c;

Debe ser evidente que el Comportamiento de un objeto está definido por el conjunto de métodos que le pueden ser aplicados(los definidos en su clase).

MensajeUn mensaje es una llamada de un objeto a uno de sus métodos y se compone

por el nombre del método y los argumentos necesarios, por supuesto el nombre del objeto que llama al método.

Por ejemplo:a.setValue( 3 )b.setValue( 5 )c = a.addValue(b)

Un programa escrito con el paradigma orientado a objetos va hacer un conjunto de objetos interrelacionándose.

Objeto y Mensaje

Page 20: Conceptos Programacion orientada a objetos

2. Conceptos Básicos de la POO. 20

Composición

En programación estructurada se crean tipos más complejos a partir otros

Relación: parte de ( part of)

Por ejemplo: Suponga que ya se han definido varias clases como Circle, Triangle, etc. Y se quiere definir una clase Logo como la siguiente:

class Logo { attributes: Circle circle Triangle triangle

methods: set(Point where) }

Obserbando esta clase se puede decir que: circle y triangle son parte de logo

Se tiene una relación inversa a la relación parte de y es la relación tiene un ( has a)

has a has a

En OOP nos referimos a esta relación como una Composición

Composición es la inclusión de objetos de clase como miembros de otras clases.

Page 21: Conceptos Programacion orientada a objetos

2. Conceptos Básicos de la POO. 21

Herencia

Una relación “un tipo de” es una relación entre clases y se lleva a cabo cuando una clase B se puede definir como una clase A más especializada.

Relación: un tipo de ( a kind of)

Por ejemplo:Suponga que se le pide realizar un programa que dibuje figuras, como círculos, puntos, triángulos, etc.

class Point { attributes: int x, y

methods: setX(int newX) getX() setY(int newY) getY() }

class Circle { attributes: int x, y, radius

methods: setX(int newX) getX() setY(int newY) getY() setRadius(newRadius) getRadius() }

Comparando ambas clases se puede decir que un Circle es un tipo de Point, pero más especializado.

class Circle inherits from Point { attributes: int radius

methods: setRadius(newRadius) getRadius()| }

Page 22: Conceptos Programacion orientada a objetos

2. Conceptos Básicos de la POO. 22

Herencia

La relación anterior es una relación que se da a nivel de clases, sin embargo si se crea una instancia de cada clase, existirá una relación es un entre dichos objetos.

Relación: es un ( is a)

Por ejemplo:Circle círculo;Point punto;

Se puede decir que cículo es un punto

La herencia utiliza las relaciones “un tipo de” y “es un” para definir una nueva clase que herede de otra. De esta forma la nueva clase contiene las características de la otra clase sin la necesidad de definirlas nuevamente.

Page 23: Conceptos Programacion orientada a objetos

2. Conceptos Básicos de la POO. 23

Herencia

A nivel de objetos se puede usar un círculo como se utilizaba un punto ya que como Circle hereda de Point. Un círculo (instancia de Circle) “es un” un punto (instancia de Point).

Por ejemplo: Circle acircle acircle.setX(1) /* Heredados de Point */ acircle.setY(2) acircle.setRadius(3) /* añadidospor Circle */

Utilizando la relación “es un”. En cualquier lugar donde se utilizaba un punto (instancia de Point) se puede utilizar un círculo (instancia de Circle).

Por ejemplo:

move(Point apoint, int deltax) { apoint.setX(apoint.getX() + deltax) }

Circle acircle ... move(acircle, 10)

Page 24: Conceptos Programacion orientada a objetos

2. Conceptos Básicos de la POO. 24

Herencia

Herencia es el mecanismo que permite que una clase A herede las propiedades de una clase B. Si “A hereda de B”, los objetos de la clase A tienen acceso a los tributos y métodos de B, sin la necesidad de redefinirlos.

Si la clase A hereda de la clase B, entonces B es la superclase de A, y ésta a su vez es subclase de B.

Point

Circle

Para el concepto de superclase también se puede utilizar el término clase padre o clase clase base.

Para el concepto de subclase también se puede utilizar el término clase hija o clase derivada.

Los objetos de una clase derivada pueden ser utilizados en circunstancias donde son utilizados objetos de su clase base.

Page 25: Conceptos Programacion orientada a objetos

La herencia múltiple no significa que múltiples subclases compartan la misma clase,

Herencia Múltiple

y tampoco significa que una subclase herede de una clase que es a su vez subclase de otra clase.

Significa que una subclase puede tener más de una superclase.

2. Conceptos Básicos de la POO. 25

Herencia

Page 26: Conceptos Programacion orientada a objetos

Herencia Múltiple

2. Conceptos Básicos de la POO. 26

Herencia

Por ejemplo: Suponga que además de las clases de dibujo ya mencionadas tiene la clase String, que cuenta con el método append( ).

class DrawableString inherits from Point, String { attributes: /* All inherited from superclasses */

methods: /* All inherited from superclasses */ }

DrawableString dstring ... move(dstring, 10)

...dstring.append("The red brown fox ...")

Page 27: Conceptos Programacion orientada a objetos

2. Conceptos Básicos de la POO. 27

Herencia

Herencia Múltiple

El orden en el cuál las superclases son provistas, definen que propiedad será accesible por el nombre causante del conflicto. Los otros quedarán "escondidos".

Las subclases deben resolver el conflicto proveyendo una propiedad con el nombre y definiendo como usar los de sus superclases.

Herencia Múltiple Si la clase A hereda de más de una clase, p.ej. A hereda de B1, B2, ..., Bn, hablamos de herencia múltiple. Esto puede presentar conflictos de nomenclatura en A si al menos dos de sus superclases definen propiedades con el mismo nombre.

Page 28: Conceptos Programacion orientada a objetos

Clase Abstracta

Con la herencia nosotros podemos forzar a una subclase para que ofrezca las mismas propiedades de sus superclases. Por consecuencia, los objetos de una subclase se comportan como los objetos de sus superclases.

Algunas veces tiene sentido solamente describir las propiedades de un conjunto de objetos sin saber el comportamiento real de antemano.

Por ejemplo: En el programa de dibujo se bebería provee un método que permitiera dibujar la figura para cada clase (diferente rutina)

Esto se realiza por medio de una clase abstracta la cual especifica algunas propiedades , pero no las define completamente.

Después hay que hacer que las clases de deriven de la clase abstracta para forzar a las clases derivadas a implementar las propiedades de la clase base.

Herencia

2. Conceptos Básicos de la POO. 268

Page 29: Conceptos Programacion orientada a objetos

Clase Abstracta

Por ejemplo: En el programa de dibujo se bebería provee un método que permitiera dibujar la figura para cada clase (diferente rutina)

abstract class DrawableObject { attributes:

methods: print() }

abstract. Se usa para expresar el hecho de que las clases derivadas deben "redefinir" las propiedades para cumplir con la funcionalidad deseada.

Desde el punto de vista de la clase abstracta, las propiedades son únicamente especificadas pero no completamente definidas.

La definición completa incluyendo la semántica de las propiedades debe ser provista por las clases derivadas.

Herencia

2. Conceptos Básicos de la POO. 29

Page 30: Conceptos Programacion orientada a objetos

Clase AbstractaPor ejemplo:

class Point inherits from DrawableObject { attributes: int x, y

methods: setX(int newX) getX() setY(int newY) getY() print() /* Redefinir para Point */ }

la clase DrawableObject, no provee ninguna funcionalidad para dibujar por sí misma.

La intención no es el crear objetos a partir de ella. Esta clase más bien especifica las propiedades que deben ser definidas por cada clase derivada.

Una clase A se llama clase abstracta si es usada solamente como una superclase para otras clases. La Clase A solamente especifica propiedades. No se usa para crear objetos. Las clases derivadas deben definir las propiedades de A.

Herencia

2. Conceptos Básicos de la POO. 30

Page 31: Conceptos Programacion orientada a objetos

Tipos Genéricos

Las clases nos permiten definir tipos definidos por el usuario, si embargo algunas veces es necesario que éstos operen sobre otros tipos de datos.

Por medio de las plantillas se pueden crear tipos que operen sobre otros tipos de datos. Así tener por ejemplo una plantilla de el tipo lista y poder crear listas de manzanas, peras, enteros, etc.

Por ejemplo:

template class List for T { attributes: /* Estructura de datos */ /* para la lista */

methods: append(T element) T getFirst() T getNext() bool more() }

En la definición de esta clase la palabra (template) sirve para denotar que esta clase es una plantilla y (T) representa al tipo real.

Los métodos de la clase utilizan este tipo simbólico para representar el tipo real.

2. Conceptos Básicos de la POO. 31

Page 32: Conceptos Programacion orientada a objetos

Con la plantilla anterior se pueden declara una Lista que operen sobre un tipo determinado de elementos.

Por ejemplo:

Al declarar la lista el compilador utiliza la plantilla y sustituye cada ocurrencia de T por Apple y crea una definición de clase real.

List for Apple appleList Apple anApple, anotherApple . . . appleList.append(anotherApple) appleList.append(anApple)

class List { attributes: /* Estructura de datos */ /* para la lista */ methods: append(Apple element) Apple getFirst() Apple getNext() bool more() }

Tipos Genéricos

2. Conceptos Básicos de la POO. 32

Page 33: Conceptos Programacion orientada a objetos

Tipos Genéricos

El compilador debe permitir crear múltiples listas para diferentes tipos en cualquier momento.

Por ejemplo:

El compilador debe darse cuenta de que ya existe la definición de una clase real o si tiene que crear una.

List for Apple appleListList for Pear pearList . . .

List for Apple aListList for Apple anotherList

Por ejemplo:

Si una clase A es parametrizada con un tipo de datos T. A es llamada plantilla de clase ( template class). Una vez que un objeto de A es creado, T es reemplazado por un tipo de datos real. Esto permite la declaración de una clase real basada en la plantilla especificada para A y en el tipo de datos real.

2. Conceptos Básicos de la POO. 33

Page 34: Conceptos Programacion orientada a objetos

Polimorfismo

Asignación estática de memoria (static binding)

En muchos de los lenguajes de programación se deben de declarar las variables antes de utilizarlas.

Si el tipo T de una variable se asocia explícitamente con su nombre N por medio de la declaración, se dice que N está estáticamente asignada a T. El proceso de asignación es conocido como asignación estática de memoria.

Por ejemplo: var i : integer;

Se declara la variable i de tipo integer para guardar valores de tipo entero, el compilador reserva memoria suficiente este tipo de datos.

En la declaración asociamos el identificador i con el tipo integer y es valida dentro del ámbito en el cual es declarada i.

Esto permite al compilador comprobar la consistencia de tipos en tiempo de compilación.

Por ejemplo:var i : integer; . . . i := 'string';

2. Conceptos Básicos de la POO. 34

Page 35: Conceptos Programacion orientada a objetos

Polimorfismo

Asignación dinámica de memoria (dynamic binding)

Algunos lenguajes de programación permiten introducir variables en el momento que se necesitan.

Si el tipo T de una variable N esta implícitamente asociado con su contenido, se dice que N está dinámicamente asignada a T. El proceso de asignación es conocido como asignación dinámica de memoria.

Por ejemplo:

El tipo de i se conoce en el momento de asignarle un valor.

En este caso i es de tipo integer ya que se le asigno un valor entero.

Asociando en tipo por el contenido se pueden asignar el tipo que se requiera en tiempo de ejecución.

Por ejemplo:

. . . /* No a parece i antes */i := 123 /* Crea i como un integer */

if somecondition() = TRUE then n := 123else n := 'abc‘endif

2. Conceptos Básicos de la POO. 35

Page 36: Conceptos Programacion orientada a objetos

Polimorfismo

El polimorfismo le permite a una entidad (por ejemplo variable, función u objeto) adoptar una variedad de representaciones.

Se debe distinguir varios tipos de polimorfismo.

El concepto de asignación dinámica de memoria permite a una variable el adoptar diferentes tipos dependiendo de su contenido en un momento en particular. Esta habilidad de una variable es conocida como polimorfismo.

A nivel de funciones se puede definir otro tipo de polimorfismo.

Por ejemplo:

boolean isNull(int i) { if (i == 0) then return TRUE else return FALSE endif }

boolean isNull(float i) { if (i == 0.0) then return TRUE else return FALSE endif }

En los Lenguajes sin polimorfismo para funciones esta definición no se puede realizar.

Algunos lenguajes que permiten realizar esta definición, identificando a cada función por su nombre y la lista de parámetros.

2. Conceptos Básicos de la POO. 36

Page 37: Conceptos Programacion orientada a objetos

Polimorfismo

A nivel de objetos se puede definir otro tipo de polimorfismo.

Si una función o método es definido por la combinación de su nombre y la lista de los tipos de sus parámetros, se habla de polimorfismo. Algunas veces también llamado sobrecarga (overloading).

Por ejemplo:

Circle acircle . . .move(acircle, 10)

move(Point apoint, int deltax) { apoint.setX(apoint.getX() + deltax) }

display(DrawableObject o) { . . . o.print() . . . }

Circle acirclePoint apointRectangle arectangle

/* debería invocar*/display(apoint) /* apoint.print() */display(acircle) /* acircle.print() */display(arectangle) /* arectangle.print() */

2. Conceptos Básicos de la POO. 37

Page 38: Conceptos Programacion orientada a objetos

Polimorfismo

2. Conceptos Básicos de la POO. 38

Page 39: Conceptos Programacion orientada a objetos

Polimorfismo

class Base { attributes:

methods: virtual foo() bar()}

class Derived inherits from Base { attributes:

methods: virtual foo() bar()}

demo(Base o) { o.foo() o.bar() }

Base abase Derived aderived

demo(abase) demo(aderived)

foo() of Base called. bar() of Base called. foo() of Derived called. bar() of Base called.

virtual denota que si el método es invocado, su definición debería ser evaluada por el contenido del objeto.

2. Conceptos Básicos de la POO. 39

Page 40: Conceptos Programacion orientada a objetos

Polimorfismo

Los objetos de superclases pueden ser sustituidos por objetos de sussubclases. Los operadores y métodos de las subclases pueden serdefinidos para ser evaluados en dos contextos:

1. Basándose en el tipo de objeto, conduciendo a una evaluación dentro del ámbito de la superclase.

2. Basándose en el contenido del objeto, conduciendo a una evaluación dentro del ámbito de la subclase contenida.El segundo tipo es llamado polimorfismo.

2. Conceptos Básicos de la POO. 40