Contenido:
ü Historia de la Programación Orientada a Objetos,
definiciones.
ü Conceptos de objetos.
ü Objeto.
ü Instancia.
ü Herencia.
ü Polimorfismo.
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 los objetos
en sus interacciones, para diseñar aplicaciones y programas informáticos. Está
basado en varias técnicas, incluyendo herencia, cohesión, abstracción,
polimorfismo, acoplamiento y encapsulamiento. Su uso se popularizó a principios
de la década de los años 1990. En la actualidad, existe una gran variedad de
lenguajes de programación que soportan la orientación a objetos. De la década
romana, los lenguajes programáticos fueron creados por ELLY nardoski de la
santísima trinidad en el año 1980.
Introducción:
los objetos son entidades que tienen un determinado
estado, comportamiento (método) e identidad:
ü El estado está compuesto de datos o informaciones;
serán uno o varios atributos a los que se habrán asignado unos valores
concretos (datos).
ü El comportamiento está definido por los métodos o
mensajes a los que sabe responder dicho objeto, es decir, qué operaciones se
pueden realizar con él.
ü La identidad es una propiedad de un objeto que lo
diferencia del resto; dicho con otras palabras, es su identificador (concepto
análogo al de identificador de una variable o una constante).
Un
objeto contiene toda la información que permite definirlo e identificarlo
frente a otros objetos pertenecientes a otras clases e incluso frente a objetos
de una misma clase, al poder tener valores
bien diferenciados en sus atributos. A su vez, los
objetos disponen de mecanismos de interacción llamados métodos, que favorecen
la comunicación entre ellos. Esta comunicación favorece a su vez el cambio de
estado en los propios objetos. Esta característica lleva a tratarlos como
unidades indivisibles, en las que no se separa el estado y el comportamiento.
Los métodos (comportamiento) y atributos (estado) están
estrechamente relacionados por la propiedad de conjunto. Esta propiedad destaca
que una clase requiere de métodos para poder tratar los atributos con los que
cuenta. El programador debe pensar indistintamente en ambos conceptos, sin
separar ni darle mayor importancia a alguno de ellos. Hacerlo podría producir
el hábito erróneo de crear clases contenedoras de información por un lado y
clases con métodos que manejen a las primeras por el otro. De esta manera se
estaría realizando una programación estructurada camuflada en un lenguaje de
programación orientado a objetos.
La POO difiere de la programación estructurada
tradicional, en la que los datos y los procedimientos están separados y sin
relación, ya que lo único que se busca es el procesamiento de unos datos de
entrada para obtener otros de salida. La programación estructurada anima al
programador a pensar sobre todo en términos de procedimientos o funciones, y en
segundo lugar en las estructuras de datos que esos procedimientos manejan. En
la programación estructurada solo se escriben funciones que procesan datos. Los
programadores que emplean Programación Orientada a Objetos, en cambio, primero
definen objetos para luego enviarles mensajes solicitándoles que realicen sus
métodos por sí mismos.
Origen:
Los
conceptos de la programación orientada a objetos tienen origen en Simula 67, un
lenguaje diseñado para hacer simulaciones, creado por Ole-Johan Dahl y Kristen
Nygaard, del
Centro de Cómputo Noruego en Oslo. En este centro
se trabajaba en simulaciones de naves, que fueron confundidas por la explosión
combinatoria de cómo las diversas cualidades de diferentes naves podían afectar
unas a las otras. La idea surgió al agrupar los diversos tipos de naves en
diversas clases de objetos, siendo responsable cada clase de objetos de definir
sus propios datos y comportamientos. Fueron refinados más tarde en Smalltalk,
desarrollado en Simula en Xerox PARC (cuya primera versión fue escrita sobre
Basic) pero diseñado para ser un sistema completamente dinámico en el cual los
objetos se podrían crear y modificar "sobre la marcha" (en tiempo de
ejecución) en lugar de tener un sistema basado en programas estáticos.
para las cuales la programación orientada a objetos
está particularmente bien adaptada. En este caso, se habla también de
programación dirigida por eventos.
Java, en gran parte debido a la aparición de
Internet y a la implementación de la máquina virtual de Java en la mayoría de
navegadores. PHP en su versión 5 se ha modificado; soporta una orientación
completa a objetos, cumpliendo todas las características propias de la
orientación a objetos.
Conceptos
fundamentales:
La programación orientada a objetos es una forma de
programar que trata de encontrar una solución a estos problemas. Introduce
nuevos conceptos, que superan y amplían conceptos antiguos ya conocidos. Entre
ellos destacan los siguientes:
Clase
Definiciones de las propiedades y comportamiento de
un tipo de objeto concreto. La instanciación es la lectura de estas
definiciones y la creación de un objeto a partir de ella.
Herencia
(Por ejemplo, herencia de la clase C a la clase D)
es la facilidad mediante la cual la clase D hereda en ella cada uno de los
atributos y operaciones de C, como si esos atributos y operaciones hubiesen
sido definidos por la misma D. Por lo tanto, puede usar los mismos métodos y
variables públicas declaradas en C. Los componentes registrados como
"privados" (private) también se heredan, pero como no pertenecen a la
clase, se mantienen escondidos al programador y sólo pueden ser accedidos a
través de otros métodos públicos. Esto es así para mantener hegemónico el ideal
de POO.
Objeto
Instancia
de una clase. Entidad provista de un conjunto de propiedades o atributos
(datos) y de comportamiento o funcionalidad (métodos), los mismos que
consecuentemente reaccionan a eventos. Se corresponden con los objetos reales
del
mundo que nos rodea, o con objetos internos del
sistema (del programa). Es una instancia a una clase.
Método
Algoritmo
asociado a un objeto (o a una clase de objetos), cuya ejecución se desencadena
tras la recepción de un "mensaje". Desde el punto de vista del
comportamiento, es lo que el objeto puede hacer. Un método puede producir un
cambio en las propiedades del objeto, o la generación de un "evento"
con un nuevo mensaje para otro objeto del sistema.
Evento
Es
un suceso en el sistema (tal como una interacción del usuario con la máquina, o
un mensaje enviado por un objeto). El sistema maneja el evento enviando el
mensaje adecuado al objeto pertinente. También se puede definir como evento la
reacción que puede desencadenar un objeto; es decir, la acción que genera
Atributos
Características
que tiene la clase.
Mensaje
Una
comunicación dirigida a un objeto, que le ordena que ejecute uno de sus métodos
con ciertos parámetros asociados al evento que lo generó.
Propiedad
o atributo
Contenedor de un tipo de datos asociados a un objeto (o a una clase de
objetos), que hace los datos visibles desde fuera del objeto y esto se define
como sus características predeterminadas, y cuyo valor puede ser alterado por
la ejecución de algún método.
Estado
interno
Es una
variable que se declara privada, que puede ser únicamente accedida y alterada
por un método del objeto, y que se utiliza para indicar distintas situaciones
posibles para el objeto (o clase de objetos). No es visible al programador que
maneja una instancia de la clase.
Componentes
de un objeto
Atributos, identidad, relaciones y métodos.
Identificación
de un objeto
Un objeto
se representa por medio de una tabla o entidad que esté compuesta por sus
atributos y funciones correspondientes.
En comparación con un lenguaje imperativo, una
"variable" no es más que un contenedor interno del atributo del
objeto o de un estado interno, así como la "función" es un
procedimiento interno del método del objeto.
Características
de la POO:
Existe un acuerdo acerca de qué características
contempla la "orientación a objetos". Las características siguientes
son las más importantes:
Abstracción
Denota
las características esenciales de un objeto, donde se capturan sus
comportamientos. Cada objeto en el sistema sirve como modelo de un
"agente" abstracto que puede realizar trabajo, informar y cambiar su
estado, y "comunicarse" con otros objetos en el sistema sin revelar
cómo se implementan estas características. Los procesos, las funciones o los
métodos pueden también ser abstraídos, y, cuando lo están, una variedad de
técnicas son requeridas para ampliar una abstracción. El proceso de abstracción
permite seleccionar las características relevantes dentro de un conjunto e
identificar comportamientos comunes para definir nuevos tipos de entidades en
el mundo real. La abstracción es clave en el proceso de análisis y diseño
orientado a objetos, ya que mediante ella podemos llegar a armar un conjunto de
clases que permitan modelar la realidad o el problema que se quiere atacar.
Encapsulamiento
Significa
reunir todos los elementos que pueden considerarse pertenecientes a una misma
entidad, al mismo nivel de abstracción. Esto permite aumentar la cohesión de
los componentes del sistema. Algunos autores confunden este concepto con el
principio de ocultación, principalmente porque se suelen emplear conjuntamente.
Modularidad
Se
denomina modularidad a la propiedad que permite subdividir una aplicación en
partes más pequeñas (llamadas módulos), cada una de las cuales debe ser tan
independiente como sea posible de la aplicación en sí y de las restantes
partes. Estos módulos se pueden compilar por separado, pero tienen conexiones
con otros módulos. Al igual que la encapsulación, los lenguajes soportan la
modularidad de diversas formas.
Principio
de ocultación
Cada objeto está aislado del exterior, es
un módulo natural, y cada tipo de objeto expone una interfaz a otros objetos
que
especifica cómo pueden interactuar con los objetos
de la clase. El aislamiento protege a las propiedades de un objeto contra su
modificación por quien no tenga derecho a acceder a ellas; solamente los
propios métodos internos del objeto pueden acceder a su estado. Esto asegura
que otros objetos no puedan cambiar el estado interno de un objeto de manera
inesperada, eliminando efectos secundarios e interacciones inesperadas. Algunos
lenguajes relajan esto, permitiendo un acceso directo a los datos internos del
objeto de una manera controlada y limitando el grado de abstracción. La
aplicación entera se reduce a un agregado o rompecabezas de objetos.
Polimorfismo
Comportamientos diferentes, asociados a
objetos distintos, pueden compartir el mismo nombre; al llamarlos por ese
nombre se utilizará el comportamiento correspondiente al objeto que se esté
usando. O, dicho de otro modo, las referencias y las colecciones de objetos
pueden contener objetos de diferentes tipos, y la invocación de un
comportamiento en una referencia
producirá el comportamiento correcto para el tipo
real del objeto referenciado. Cuando esto ocurre en "tiempo de
ejecución", esta última característica se llama asignación tardía o
asignación dinámica. Algunos lenguajes proporcionan medios más estáticos (en
"tiempo de compilación") de polimorfismo, tales como las plantillas y
la sobrecarga de operadores de C++.
Herencia
Las clases no se encuentran aisladas, sino
que se relacionan entre sí, formando una jerarquía de clasificación. Los
objetos heredan las propiedades y el comportamiento de todas las clases a las
que pertenecen. La herencia organiza y facilita el polimorfismo y el
encapsulamiento, permitiendo a los objetos ser definidos y creados como tipos
especializados de objetos preexistentes. Estos pueden compartir (y extender) su
comportamiento sin tener que volver a implementarlo. Esto suele hacerse habitualmente
agrupando los objetos en clases y estas en árboles o enrejados que reflejan un
comportamiento común. Cuando un objeto hereda de más de una clase se dice que
hay
herencia múltiple; siendo de alta complejidad
técnica por lo cual suele recurrirse a la herencia virtual para evitar la
duplicación de datos.
Recolección
de basura
La
recolección de basura o garbage collection es la técnica por la cual el entorno
de objetos se encarga de destruir automáticamente, y por tanto desvincular la
memoria asociada, los objetos que hayan quedado sin ninguna referencia a ellos.
Esto significa que el programador no debe preocuparse por la asignación o
liberación de memoria, ya que el entorno la asignará al crear un nuevo objeto y
la liberará cuando nadie lo esté usando. En la mayoría de los lenguajes
híbridos que se extendieron para soportar el Paradigma de Programación
Orientada a Objetos como C++ u Object Pascal, esta característica no existe y
la memoria debe desasignarse expresamente.
Definiciones:
Definición
1. Un lenguaje
de programación es un conjunto limitado de palabras y símbolos que representan
procedimientos, cálculos, decisiones y otras operaciones, como control de
procesos, que puede ejecutar una computadora.
Un programa es un conjunto
de instrucciones que son dadas a la máquina mediante un lenguaje de
programación. Los lenguajes, en muy grandes razgos, están clasificados conforme
qué tan amigables son para el usuario. Por ejemplo, los lenguajes como
ensamblador son considerados lenguajes de bajo nivel y los lenguajes como BASIC
de alto nivel por estar "más cerca del usuario". Los lenguajes de
alto nivel normalmente son parecidos al inglés, aunque no siempre. Un ejemplo
de un lenguaje de alto nivel no parecido al inglés es Visual BASIC de la
versión española de Excel, versión 5.0, que es más bien parecido al español.
Las computadoras generalmente operan en lenguaje máquina que es el lenguaje
utilizado por la "unidad central de procesamiento" (o procesador).
Por esta razón es obvio
preguntarse ¿cómo es que la computadora entiende lo
que le digo si no lo escribí en lenguaje máquina?
Definición
2. Un
intérprete es un programa que, como su nombre lo indica, interpreta símbolos en
un programa y los traduce a lenguaje máquina conforme deban ser ejecutados.
Definición
3. Un
compilador es un programa muy utilizado en lenguajes de alto nivel que permite
traducir un programa escrito en un lenguaje dado a lenguaje máquina para
después ser ejecutado
Definición
4. La
programación estructurada es la escritura de programas de manera que
El programa tiene un diseño modular: el código del
programa está dividido en módulos o segmentos de código que son ejecutados
conforme sea requerido;
El
concepto de objeto:
La programación orientada a objetos consiste en
ordenar datos en conjuntos modulares de elementos de información del mundo real
(denominado un dominio). Estos elementos de datos se llaman objetos. Estos
datos se agrupan de acuerdo a las características principales del mundo real de
estos elementos (tamaño, color, etc.).
El enfoque de objetos es una idea que se ha probado
con creces. Simula fue el primer lenguaje de programación en implementar el
concepto de clases en 1967. En 1976, Smalltalk implementó los conceptos de
encapsulación, agrupación y herencia (los conceptos principales de la
programación orientada a objetos). Por otra parte, se han implementado varios
lenguajes de programación orientada a objetos a escala global (Eiffel,
Objective C, Loops, etc.).
La dificultad que presenta este enfoque es la
creación de una representación abstracta, en forma de objetos, de entidades que
realmente existen (perro, auto, lámpara eléctrica...) o que existen
virtualmente (seguridad social, clima...).
Un objeto se caracteriza por varios conceptos:
Atributos:
estos son los datos que
caracterizan al objeto. Son variables que almacenan datos relacionados al
estado de un objeto.
Métodos:
(usualmente llamados funciones de miembro): Los métodos de un objeto
caracterizan su comportamiento, es decir, son todas las acciones (denominadas
operaciones) que el objeto puede realizar por sí mismo. Estas operaciones hacen
posible que el objeto responda a las solicitudes externas (o que actúe sobre
otros objetos). Además, las operaciones están estrechamente
ligadas a los atributos, ya que sus acciones pueden
depender de, o modificar, los valores de un atributo.
Identidad: El objeto tiene una
identidad, que lo distingue de otros objetos, sin considerar su estado. Por lo
general, esta identidad se crea mediante un identificador que deriva
naturalmente de un problema (por ejemplo: un producto puede estar representado
por un código, un automóvil, por un número de modelo, etc.).
Definición
de objeto:
En filosofía un objeto es
aquello que puede ser observado, estudiado y aprendido, en contraposición a la
representación abstracta de ese objeto que se crea en la mente a través del
proceso de generalización. Un objeto en POO representa alguna entidad de la
vida real, es decir, alguno de los objetos que pertenecen al negocio con que
estamos trabajando o al problema con el que nos estamos enfrentando, y con los
que podemos interactuar. A través del estudio de ellos se adquiere el
conocimiento necesario para, mediante la
abstracción y la generalización, agruparlos según sus características en conjuntos.
Estos conjuntos determinan las clases de objetos con las que estamos
trabajando. Primero existen los objetos; luego aparecen las clases en función
de la solución que estemos buscando. Ésta es la forma más común de adquirir
conocimiento aunque no es la única. En ocasiones, cuando el observador es un
experto del negocio (o del problema), el proceso puede ser a la inversa y
comenzar el análisis en una base teórica abstracta, sustentada por el
conocimiento previo que da lugar primeramente a clases de objetos que
satisfagan las necesidades de la solución.
Estos conceptos son parte de la base teórica de la
idea de objeto y clase utilizados en la POO. Los objetos tienen características
fundamentales que nos permiten conocerlos mediante la observación, identificación
y el estudio posterior de su comportamiento; estas características son:
ü Identidad
ü Comportamiento
ü Estado
En
las ramas de las ciencias de la computación más estrictamente matemáticas, el
término objeto es usado en sentido puramente matemático para referirse a
cualquier "cosa". Esta interpretación resulta útil para discutir
sobre teorías abstractas, pero no es suficientemente concreta para servir como
definición de un tipo primitivo en discusiones de ramas más específicas, como
en la programación, que está más cerca de cálculos reales y el procesamiento de
información
Identidad:
La identidad es la
propiedad que permite diferenciar a un objeto y distinguirse de otros.
Generalmente esta propiedad es tal, que
da nombre al objeto. Tomemos por ejemplo el
"verde" como un objeto concreto de una clase color; la propiedad que
da identidad única a este objeto es precisamente su "color" verde.
Tanto es así que para nosotros no tiene sentido usar otro nombre para el objeto
que no sea el valor de la propiedad que lo identifica.
En programación la identidad de los objetos sirve
para comparar si dos objetos son iguales o no. No es raro encontrar que en
muchos lenguajes de programación la identidad de un objeto esté determinada por
la dirección de memoria de la computadora en la que se encuentra el objeto,
pero este comportamiento puede ser variado redefiniendo la identidad del objeto
a otra propiedad.
Comportamiento:
El comportamiento de un
objeto está directamente relacionado con su funcionalidad y determina las operaciones
que este puede realizar o a las que puede responder ante mensajes enviados por
otros objetos. La funcionalidad de un objeto está determinada,
primariamente, por su responsabilidad. Una de las
ventajas fundamentales de la POO es la reusabilidad del código; un objeto es
más fácil de reutilizarse en tanto su responsabilidad sea mejor definida y más
concreta.
Una tarea fundamental a la hora de diseñar una
aplicación informática es definir el comportamiento que tendrán los objetos de
las clases involucradas en la aplicación, asociando la funcionalidad requerida
por la aplicación a las clases adecuadas.
Estado:
El estado de un objeto se refiere al conjunto de
los valores de sus atributos en un instante de tiempo dado. El comportamiento
de un objeto puede modificar el estado de este. Cuando una operación de un
objeto modifica su estado se dice que esta tiene "efecto colateral".
Esto tiene especial importancia en aplicaciones que
crean varios hilos de ejecución. Si un objeto es compartido por varios hilos y
en el transcurso de sus operaciones estas modifican el estado del objeto, es
posible que se deriven errores del hecho de que alguno de los hilos asuma que
el estado del objeto no cambiará (Véase Condición de carrera).
Objetos
en la programación orientada a objetos
En programación orientada a objetos (POO), una
instancia de programa (por ejemplo un programa ejecutándose en una computadora)
es tratada como un conjunto dinámico de objetos interactuando entre sí. Los
objetos en la POO extienden la noción más general descrita en secciones
anteriores para modelar un tipo muy específico que está definido
fundamentalmente por:
Atributos, que representan los datos asociados al objeto, o, lo que es
lo mismo, sus propiedades o características. Los atributos y sus valores en un
momento dado, determinan el estado de un objeto.
Métodos,
que acceden a los atributos de una manera predefinida e implementan el
comportamiento del objeto.
Los atributos y métodos de un objeto están
definidos por su clase, aunque (en un lenguaje dinámico como Python o Ruby) una
instancia puede poseer atributos que no fueron definidos en su clase. Algo
similar ocurre con los métodos: una instancia puede contener métodos que no
estén definidos en su clase de la misma manera que una clase puede declarar
ciertos métodos como "métodos de clase", y estos (en dependencia del
lenguaje) podrán estar o no presentes en la instancia.
En el caso de la mayoría de los objetos, los
atributos solo pueden ser accedidos a través de los métodos; de esta manera es
más fácil garantizar que los datos permanecerán siempre en un estado bien
definido (invariante de clase).
En un lenguaje en el que cada objeto es creado a
partir de una clase, un objeto es llamado una instancia de esa clase. Cada
objeto pertenece a un tipo y dos objetos que pertenezcan a la misma clase
tendrán el mismo tipo de dato. Crear una instancia de una clase es entonces
referido como instanciar la clase.
En casi todos los lenguajes de programación
orientados a objeto, el operador "punto" (.) es usado para referirse
o "llamar" a un método particular de un objeto. Un ejemplo de
lenguaje que no siempre usa este operador es C++, ya que para referirse a los
métodos de un objeto a través de un puntero al objeto se utiliza el operador (->).
Considérese como ejemplo una clase aritmética
llamada Aritmética. Esta clase contiene métodos como "sumar",
"restar", "multiplicar", "dividir", etc. que
calculan el resultado de realizar estas operaciones sobre dos números.
Un objeto de esta clase puede ser utilizado para
calcular el producto de dos números, pero primeramente sería necesario definir
dicha clase y crear un objeto. En las secciones a continuación se muestra cómo
hacer esto utilizando dos lenguajes de programación: C++ y Python.
Objeto:
Un objeto es una entidad provista de un conjunto de
propiedades o atributos (datos), de un comportamiento o funcionalidad (métodos)
y de sus posibles relaciones con otros objetos.
El concepto de objeto tiene un concepto equivalente
al objeto de nuestro mundo real. En nuestro entorno siempre estamos en
constante relación con objetos: los creamos, los usamos, los modificamos
cambiando sus atributos, características o propiedades, los relacionamos con
otros objetos, etc.
Por ejemplo tomemos el objeto Automóvil.
Un automóvil es un objeto bastante pesado que tiene
un conjunto de propiedades como su identificación (placa), color, marca,
modelo, accesorios, etc. Tiene también un conjunto de funciones como la de
desplazarse, detenerse, ponerse en marcha. Podemos cambiarle de color, aumentar
o quitar sus accesorios; es decir, podemos modificar sus propiedades. Tienen de
la capacidad de ser activados para poner en acción sus funcionalidades; es
decir, disponemos de un procedimiento para ponerlo en marcha, avanzar en
retroceso, detenerlo, voltear a la izquierda o derecha; es decir, mediante un
conjunto de métodos podemos darle uso al objeto automóvil.
En la POO el objeto es el automóvil; las
propiedades de este objeto son sus características y los métodos lo constituyen
las funcionalidades o procedimientos con los cuales hacemos uso del objeto y
modificamos su estado o contenido.
En el Excel podemos hablar del objeto Celda. Este
objeto tiene dimensiones, color de fondo, tipo de borde, tiene un contenido o
valor. Posee algunas funcionalidades que nos permiten cambiarlo de tamaño, de
color de fondo, de contenido. El objeto celda pertenece al objeto Rango y está
relacionada con él y tiene otras relaciones con otros objetos como el objeto
Hoja, el objeto Gráfico, Libro, etc.
Instancia.
Se llama instancia a todo objeto que derive de
algún otro. De esta forma, todos los objetos son instancias de algún otro,
menos la clase Object que es la madre de todas.
En el paradigma de la orientación a objetos, una
instancia (en inglés, instance) se refiere a una realización específica de una
clase o prototipo determinados.
En general, cuando se ejecuta un programa en un
computador, se dice que éste se instancia. En lenguajes que crean objetos a
partir de clases, un objeto es una instancia de una clase. Esto es, un miembro
de una clase que tiene atributos en lugar de variables. En un contexto del
mundo real, podríamos pensar en "Perro" como una clase y en un perro
concreto es una instancia de esta clase.1 En este caso no nos importa la raza
del perro. Si fuese de nuestro interés modelarla, y diferenciásemos entre un
dóberman y un chihuahua, no solo cada instancia sería diferente, sino que
pertenecerían a clases o prototipos diferentes, cf. herencia (informática).
¿Qué
es una Instancia?
Bien, decíamos que una clase es como la definición
de un objeto, pero no es el objeto en sí, del modo como una idea no es una cosa
física (el ejemplo de la silla). Así que para sentarnos necesitaremos convertir
esa idea en algo, en un objeto real; a ese objeto lo llamamos instancia.
En un mismo proyecto puedo tener una o más
instancias de una misma clase sin problemas.
Cada vez que creamos una nueva instancia, ésta
adquiere las propiedades, métodos y eventos de la clase a la que pertenece (es
lo que permite la relación es un), sin embargo, cada instancia es independiente
de las otras; esto nos da dos ventajas:
Si hago
algún cambio en la clase, todas las instancias de esta clase se actualizarán
automáticamente; esto nos permite hacer cambios sin tener que ir a cada una de
las instancias (se aplica el mismo principio de herencia, aunque a un nivel
diferente).
Al ser
independientes de las otras instancias, puedo darles valores diferentes sin que
afecten a las demás (como tener una silla negra, una roja, una más alta, etc.).
Aunque comparten la misma estructura, pueden programarse individualmente, dando
versatilidad y flexibilidad al código.
Herencia:
En programación orientada a objetos la herencia es,
después de la agregación o composición, el mecanismo más utilizado para
alcanzar algunos de los objetivos más preciados en el desarrollo de software
como lo son la reutilización y la extensibilidad. A través de ella los
diseñadores pueden crear nuevas clases partiendo de una clase o de una
jerarquía de clases preexistente (ya comprobadas y verificadas) evitando con
ello el rediseño, la modificación y verificación de la parte ya implementada.
La herencia facilita la creación de objetos a partir de otros ya existentes e
implica que una subclase obtiene todo el comportamiento (métodos) y
eventualmente los atributos (variables) de su superclase.
Es la relación entre una clase general y otra clase
más específica. Por ejemplo: Si declaramos una clase párrafo derivada de una
clase texto, todos los métodos y variables asociadas con la clase texto, son
automáticamente heredados por la subclase párrafo.
La herencia es uno de los mecanismos de los
lenguajes de programación orientada a objetos basados en clases, por medio del
cual una clase se deriva de otra de manera que extiende su funcionalidad. La
clase de la que se hereda se suele denominar clase base, clase padre,
superclase, clase ancestro (el vocabulario que se utiliza suele depender en
gran medida del lenguaje de programación).
En los lenguajes que cuentan con un sistema de
tipos fuerte y estrictamente restrictivo con el tipo de datos de las variables,
la herencia suele ser un requisito fundamental para poder emplear el
Polimorfismo, al igual que un mecanismo que permita decidir en tiempo de
ejecución qué método debe invocarse en respuesta a la recepción de un mensaje,
conocido como enlace tardío (late binding) o enlace dinámico (dynamic binding).
El
concepto de herencia:
La herencia es específica de la programación
orientada a objetos, donde una clase nueva se crea a partir de una clase
existente. La herencia (a la que habitualmente se denomina subclases) proviene
del hecho de que la subclase (la nueva clase creada) contiene las atributos y
métodos de la clase primaria. La principal ventaja de la herencia es la
capacidad para definir atributos y métodos nuevos para la subclase, que luego
se aplican a los atributos y métodos heredados.
Esta particularidad permite crear una estructura
jerárquica de clases cada vez más especializada. La gran ventaja es que uno ya
no debe comenzar desde cero cuando desea especializar una clase existente. Como
resultado, se pueden adquirir bibliotecas de clases que ofrecen una base que
puede especializarse a voluntad (la compañía que vende estas clases tiende a
proteger las datos miembro usando la encapsulación).
Jerarquía
de clase:
La relación primaria-secundaria entre clases puede
representarse desde un punto de vista jerárquico, denominado vista de clases en
árbol. La vista en árbol comienza con una clase general llamada superclase (a
la que algunas veces se hace referencia como clase primaria, clase padre, clase
principal, o clase madre; existen muchas metáforas genealógicas). Las clases
derivadas (clase secundaria o subclase) se vuelven cada vez más especializadas
a medida que van descendiendo el árbol. Por lo tanto, se suele hacer referencia
a la relación que une a una clase secundaria con una clase primaria mediante la
frase "es una" x o y.
Herencia
múltiple:
Algunos lenguajes orientados a objetos, como C++
permiten herencias múltiples, lo que significa que una clase puede heredar los
atributos de otras dos superclases. Este método puede utilizarse para agrupar
atributos y métodos desde varias clases dentro de una sola.
CONCEPTOS:
Herencia: Es una propiedad que permite que los
objetos sean creados a partir de otros ya existentes, obteniendo
características (métodos y atributos) similares a los ya existentes. Es la
relación entre una clase general y otra clase mas especifica. Es un mecanismo
que nos permite crear clases derivadas a partir de clase base, Nos permite
compartir automáticamente métodos y datos entre clases subclases y objetos. Por
ejemplo: Si declaramos una clase párrafo derivada de un clase texto todos los
métodos y variables asociadas con la clase texto son automáticamente heredados
por la subclase párrafo.[1]
Herencia: Este quizás es el tema que más problemas causa al
estudiante; sin embargo, no es difícil en su concepción.
El objeto Persona es un objeto muy genérico y
limitado en sí; así que se puede considerar como un objeto Abstracto; ya que
por sí mismo no puede crear una persona completa; sin embargo, sus funciones
básicas son las mismas en todos los seres humanos, con diferencias puntuales,
así que podemos crear dos objetos Hombre y Mujer, que hereden todas sus
características genéricas como respirar, hablar, nombre, etc., del objeto
Persona, y sea en la implementación de cada objeto donde empiecen las
diferencias.
Es una propiedad que permite que los objetos sean
creados a partir de otros ya existentes, obteniendo características (métodos y
atributos) similares a los ya existentes. Es la relación entre una clase
general y otra clase mas especifica. Es un mecanismo que nos permite crear
clases derivadas a partir de clase base, Nos permite compartir automáticamente
métodos y datos entre clases subclases y objetos.
La herencia es uno de los mecanismos de la
programación orientada a objetos, por medio del cual una clase se deriva de
otra, llamada entonces superclase, de manera que extiende su funcionalidad. Una
de sus funciones más importantes es la de proveer
Tipos:
Herencia múltiple hace referencia a una
característica de los lenguajes de programación orientada a objetos en la que
una clase puede heredar comportamientos y características de más de una
superclase. Esto contrasta con la herencia simple, donde una clase sólo puede
heredar de una superclase
Polimorfismo:
En programación orientada a objetos, el
polimorfismo se refiere a la propiedad por la que es posible enviar mensajes
sintácticamente iguales a objetos de tipos distintos. El único requisito que
deben cumplir los objetos que se utilizan de manera polimórfica es saber
responder al mensaje que se les envía.
La apariencia del código puede ser muy diferente
dependiendo del lenguaje que se utilice, más allá de las obvias diferencias
sintácticas.
Por ejemplo, en un lenguaje de programación que
cuenta con un sistema de tipos dinámico (en los que las variables pueden
contener datos de cualquier tipo u objetos de cualquier clase) como Smalltalk
no se requiere que los objetos que se utilizan de modo polimórfico sean parte
de una jerarquía de clases.
Clasificación:
Se puede clasificar el polimorfismo en dos grandes
clases:
Polimorfismo dinámico (o polimorfismo paramétrico) es aquél en el que el
código no incluye ningún tipo de especificación sobre el tipo de datos sobre el
que se trabaja. Así, puede ser utilizado a todo tipo de datos compatible.
ü Polimorfismo estático (o polimorfismo ad hoc) es
aquél en el que los tipos a los que se aplica el polimorfismo deben ser
explícitos y declarados uno por uno antes de poder ser utilizados.
ü El polimorfismo dinámico unido a la herencia es lo
que en ocasiones se conoce como programación genérica.
También se clasifica en herencia por redefinición
de métodos abstractos y por método sobrecargado. El segundo hace referencia al
mismo método con diferentes parámetros.
Otra clasificación agrupa los polimorfismo en dos
tipos: Ad-Hoc que incluye a su vez sobrecarga de operadores y coerción,
Universal (inclusión o controlado por la herencia, paramétrico o generalidad).
Definición
de polimorfismo:
La palabra polimorfismo proviene del griego y
significa que posee varias formas diferentes. Este es uno de los conceptos
esenciales de una programación orientada a objetos. Así como la herencia está
relacionada con las clases y su jerarquía, el polimorfismo se relaciona con los
métodos.
En general, hay tres tipos de polimorfismo:
Polimorfismo de sobrecarga
Polimorfismo paramétrico (también llamado polimorfismo de plantillas)
Polimorfismo de inclusión (también llamado redefinición o subtipado)
Los diferentes tipos de polimorfismo
Trataremos de describir ahora con más precisión
estos tipos de polimorfismo, pero le sugerimos prestar atención, ya que muchas
personas suelen confundirse al tratar de comprender las diferencias existentes
entre estos tres tipos.
Polimorfismo
de sobrecarga
El polimorfismo de sobrecarga ocurre cuando las funciones
del mismo nombre existen, con funcionalidad similar, en clases que son
completamente independientes una de otra (éstas no tienen que ser clases
secundarias de la clase objeto). Por ejemplo, la clase complex, la clase image
y la clase link pueden todas tener la función "display". Esto
significa que no necesitamos preocuparnos sobre el tipo de objeto con el que
estamos trabajando si todo lo que deseamos es verlo en la pantalla.
Por lo tanto, el polimorfismo de sobrecarga nos
permite definir operadores cuyos comportamientos varían de acuerdo a los
parámetros que se les aplican. Así es posible, por ejemplo, agregar el operador
+ y hacer que se comporte de manera distinta cuando está haciendo referencia a
una operación entre dos números enteros (suma) o bien cuando se encuentra entre
dos cadenas de caracteres (concatenación).
Polimorfismo
paramétrico
El polimorfismo paramétrico es la capacidad para
definir varias funciones utilizando el mismo nombre, pero usando parámetros
diferentes (nombre y/o tipo). El polimorfismo paramétrico selecciona
automáticamente el método correcto a aplicar en función del tipo de datos
pasados en el parámetro.
Por lo tanto, podemos por ejemplo, definir varios
métodos homónimos de addition () efectuando una suma de valores.
El método
int addition (int, int) devolvería la suma de dos números enteros.
Float addition
(float, float) devolvería la suma de dos flotantes.
Char
addition (char, char) daría por resultado la suma de dos caracteres definidos
por el autor.
etc.
Una signatura es el nombre y tipo (estático) que se
da a los argumentos de una función. Por esto, una firma de método determina qué
elemento se va a llamar.
Polimorfismo
de subtipado
La habilidad para redefinir un método en clases que
se hereda de una clase base se llama especialización. Por lo tanto, se puede
llamar un método de objeto sin tener que conocer su tipo intrínseco: esto es
polimorfismo de subtipado. Permite no tomar en cuenta detalles de las clases
especializadas de una familia de objetos, enmascarándolos con una interfaz
común (siendo esta la clase básica).
Imagine un juego de ajedrez con los objetos rey,
reina, alfil, caballo, torre y peón, cada uno heredando el objeto pieza.
El método movimiento podría, usando polimorfismo de
subtipado, hacer el movimiento correspondiente de acuerdo a la clase objeto que
se llama. Esto permite al programa realizar el movimiento.de pieza sin tener
que verse conectado con cada tipo de pieza en particular.
Polimorfismo es la capacidad de un objeto de adquirir
varias formas. El uso más común de polimorfismo en programación orientada a
objetos se da cuando se utiliza la referencia de una clase padre, para
referirse al objeto de la clase hijo.
Cualquier objeto java que pueda pasar más de un
test "ES-UN" es considerado polimórfico. En Java, todos los objetos
son polimórficos ya que cualquier objeto pasaría un test "ES-UN" dado
que son de su propio tipo, además del de la clase Object.
Es importante saber que la única manera de acceder
a un objeto es a través de una variable de referencia. La variable de
referencia sólo puede ser de un tipo. Una vez declarado el tipo de la variable
de referencia, no se puede cambiar.
La variable de referencia puede ser reasignada a
otros objetos, siempre y cuando no haya sido declarada "final". El
tipo de la variable de referencia, determina los métodos que podrán ser
llamados sobre el objeto.
Una variable de referencia puede hacer referencia a
cualquier objeto o cualquier subtipo de su propio tipo.
Concepto: En programación orientada a objetos se denomina
polimorfismo a la capacidad que tienen los objetos de una clase de responder al
mismo mensaje o evento en función de los parámetros utilizados durante su
invocación. Un objeto polimórfico es una entidad que puede contener valores de
diferentes tipos durante la ejecución del programa.
En algunos lenguajes, el término polimorfismo es
también conocido como ‘Sobrecarga de parámetros’ ya que las características de
los objetos permiten aceptar distintos parámetros para un mismo método
(diferentes implementaciones) generalmente con comportamientos distintos e
independientes para cada una de ellas.
Conceptos
Básicos de Visual Basic:
Objeto: Un objeto es una entidad que tiene asociado un
conjunto de métodos, eventos y propiedades. Los formularios y controladores de
Visual Basic son objetos que exponen sus propios métodos, propiedades y
eventos. Las propiedades se pueden considerar como atributos de un objeto, los
métodos como sus acciones y los eventos como sus respuestas. El siguiente es el
ejemplo preferido por Microsoft para explicar estos conceptos y se basa en un
objeto de uso diario como el globo de un niño.
Propiedades:
Son los atributos de un objeto,
entre las propiedades de un globo se incluyen atributos visibles como el altos,
el diámetro y el color, otras propiedades describen su estado (inflado o
desinflado) o tributos que no son visibles, como su edad. Por definición, todos
los globos tienen estas propiedades; lo que varía de un globo a otro son los
valores de estas propiedades
Método
Los métodos son funciones
internas de un determinado objeto que permite realizar funciones sobre él o
sobre otro objeto. Se le conoce como aquello que el objeto puede hacer.
Ejemplo: Deseamos poner en la ventana de Windows de nuestra aplicación “Hola
mundo”, por lo tanto usaremos el método Print de los formularios pondremos de
la siguiente forma Form1.Print “Hola Mundo”. En el ejemplo del globo los
métodos que podemos encontrar son Desinflar y Hacer Ruido, recordemos el método
es aquello que el objeto globo puede hacer.
Evento Un evento es una acción que sucede en un objeto,
decimos también que es un proceso que ocurre en un momento no determinado
causando una respuesta por parte de un objeto. Los objetos están atentos a
cualquier evento que ocurra en u entorno o dentro de ellos mismos. Un programa
Visual Basic es un POE (Programa orientado a eventos). Es decir, cuando se
mueve el mouse por la pantalla, se escribe algún texto, etc.; nuestro programa
está atento a que algún evento ocurra, en qué objeto ocurre y que acción debe
tomar (programa).
Creación
de programas La creación
de un programa bajo Visual Basic lleva los siguientes pasos:
Creación de una interface de usuario (Graphics Interface User). Esta interface será la
principal vía de comunicación entre el usuario y el programa (hombre-máquina),
tanto para salida de datos como para entrada. Será necesario partir de una
ventada conocida como Formulario a la que le iremos añadiendo los controles
necesarios.
Definición de las propiedades de los
controles (objetos) que hayamos colocados en ese formulario. Estas propiedades
determinarán la forma estática de los controles, es decir, como son los
controles y para qué sirven.
Generación del código asociado a los eventos que ocurran a
estos controles. A la respuesta a estos eventos (click, doble click, una tecla
pulsada, etc.) le llamamos Procedimiento y deberá generarse de acuerdo a las
necesidades del programa.
Generación del código del programa. Un
programa puede hacerse solamente con la programación de los distintos
procedimientos que acompañan a cada control u objeto. Sin embargo, VB ofrece la
posibilidad de establecer un código de programa separado de estos eventos. Este
código puede introducirse en 3 tipos de bloques de instrucciones llamados:
Módulos, funciones y Procedimientos.
Estos Procedimientos no responden a un evento
lanzado por un control, sino que responden a un evento producido durante la
ejecución del programa. A continuación explicaremos en forma breve algunos de
los términos necesarios para poder entender el entorno de programación en
Visual Basic, los mismos que serán explicados en detalle en la siguiente
sección.
Proyecto Es una colección de archivos relacionados o
programas, que se integran para crear en su conjunto una aplicación completa.
El proyecto genera el programa final, el mismo que el usuario puede ejecutar
desde Windows haciendo doble clic en su icono o accediéndolo mediante el menú
Inicio.
Formulario Un formulario es una ventana del sistema operativo
Windows. Este formulario es la interface gráfica de su aplicación, sobre el que
podrá añadir los controles que necesite su programa. Podemos abrir tantas
ventanas como queramos en nuestro proyecto, pero el nombre de cada una de ellas
debe ser distinto. Por defecto la ventana que se abre en un proyecto Visual
Basic tiene el nombre de Form1.
Módulo Un módulo es un archivo de Visual Basic donde
escribimos la parte del código de nuestro programa que deseamos que se comparta
entre todos los formularios.
Propiedades Son los datos que hacen referencia a un objeto o
formulario. Ejemplo: Color de fondo del formulario, Fuente de texto de un
TextBox.
La
caja de Controles La caja de
controles contiene los controles que usted puede colocar en el formulario. Los
controles que están a nuestra disposición en esta caja son el denominado
estándar, sin embargo, podemos incluir y quitar tantos controles como queremos
o creamos conveniente.
Asistentes Son cuadros de diálogo que automatizan tareas
basándose en preguntas y respuestas.
Compilador Es un sistema que convierte el programa que usted
escribió en una aplicación que la computadora pueda ejecutar.
No hay comentarios.:
Publicar un comentario