Programacion Orientada A Objeto
Programacion Orientada A Objeto
Programacion Orientada A Objeto
estructuras lógicas (objetos). Este enfoque aumenta la capacidad para administrar la complejidad del software, lo cual resulta
especialmente importante cuando se desarrollan y mantienen aplicaciones y estructuras de datos de gran tamaño. (MATLAB,
2018).
La programación Orientada a objetos (POO, u OOP según sus siglas en inglés) es un paradigma de programación que usa
objetos en sus interacciones, para diseñar aplicaciones y programas informáticos.
Está basada 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 1990. En la actualidad, existe una gran variedad de lenguajes de programación
que soportan la orientación a objetos. (Ángel Roldán, 2017).
La POO es una forma especial de programar, este paradigma de programación es cercano a como expresamos las cosas en la
vida real en nuestro día a día. Con la POO tenemos que aprender a pensar las cosas de una manera distinta para poder
escribir nuestros programas en términos de objetos, propiedades y métodos. La POO tiene como principio que todo en la vida
es un objeto programable, entonces para empezar a programar con este paradigma tendríamos que empezar con desarrollar
nuestro pensamiento basado en objetos.
En un esquema POO el coche sería el objeto, las propiedades serían las características como el color o el modelo y los
métodos serían las funcionalidades asociadas como ponerse en marcha o parar.
Los programas Orientados a objetos utilizan muchos objetos para realizar las acciones que se desean realizar y ellos mismos
también son objetos, por ejemplo un taller de coches, el taller de coches será un objeto que utilizará objetos coche,
herramienta, mecánico, recambios, etc.
Algunas de las ventajas de la programación orientada a objetos son los siguientes:
Desventajas
La programación orienta a objetos es una forma especial de pensar, nos permite modelar nuestra realidad dentro de un entorno
de programación, partiendo de la primicia de que todo en esta vida es un objeto programable.
La programación orientada a objetos (POO, en español; OOP, según sus siglas en inglés) es un paradigma de programación que
viene a innovar la forma de obtener resultados. Los objetos manipulan los datos de entrada para la obtención de datos de salida
específicos, donde cada objeto ofrece una funcionalidad especial.
Muchos de los objetos prediseñados de los lenguajes de programación actuales permiten la agrupación en bibliotecas o librerías, sin
embargo, muchos de estos lenguajes permiten al usuario la creación de sus propias bibliotecas.
Está basada en varias técnicas: herencia, cohesión, abstracción, polimorfismo, acoplamiento y encapsulamiento.
Su uso se popularizó a principios de la década de 1990. En la actualidad, existe una gran variedad de lenguajes de programación que
soportan la orientación a objetos.
La programación Orientada a objetos (POO) es una forma especial de programar, más cercana a como
expresaríamos las cosas en la vida real que otros tipos de programación.
Con la POO tenemos que aprender a pensar las cosas de una manera distinta, para escribir nuestros programas
en términos de objetos, propiedades, métodos y otras cosas que veremos rápidamente para aclarar conceptos
y dar una pequeña base que permita soltarnos un poco con este tipo de programación.
Motivación
Durante años, los programadores se han dedicado a construir aplicaciones muy parecidas que resolvían una y
otra vez los mismos problemas. Para conseguir que los esfuerzos de los programadores puedan ser utilizados
por otras personas se creó la POO. Que es una serie de normas de realizar las cosas de manera que otras
personas puedan utilizarlas y adelantar su trabajo, de manera que consigamos que el código se pueda
reutilizar.
La POO no es difícil, pero es una manera especial de pensar, a veces subjetiva de quien la programa, de
manera que la forma de hacer las cosas puede ser diferente según el programador. Aunque podamos hacer los
programas de formas distintas, no todas ellas son correctas, lo difícil no es programar orientado a objetos sino
programar bien. Programar bien es importante porque así nos podemos aprovechar de todas las ventajas de la
POO.
Pues en un esquema POO el coche sería el objeto, las propiedades serían las características como el color o el
modelo y los métodos serían las funcionalidades asociadas como ponerse en marcha o parar.
Por poner otro ejemplo vamos a ver cómo modelizaríamos en un esquema POO una fracción, es decir, esa
estructura matemática que tiene un numerador y un denominador que divide al numerador, por ejemplo 3/2.
La fracción será el objeto y tendrá dos propiedades, el numerador y el denominador. Luego podría tener varios
métodos como simplificarse, sumarse con otra fracción o número, restarse con otra fracción, etc.
Estos objetos se podrán utilizar en los programas, por ejemplo en un programa de matemáticas harás uso de
objetos fracción y en un programa que gestione un taller de coches utilizarás objetos coche. Los programas
Orientados a objetos utilizan muchos objetos para realizar las acciones que se desean realizar y ellos mismos
también son objetos. Es decir, el taller de coches será un objeto que utilizará objetos coche, herramienta,
mecánico, recambios, etc.
Clases en POO
Las clases son declaraciones de objetos, también se podrían definir como abstracciones de objetos. Esto
quiere decir que la definición de un objeto es la clase. Cuando programamos un objeto y definimos sus
características y funcionalidades en realidad lo que estamos haciendo es programar una clase. En los ejemplos
anteriores en realidad hablábamos de las clases coche o fracción porque sólo estuvimos definiendo, aunque
por encima, sus formas.
Propiedades en clases
Las propiedades o atributos son las características de los objetos. Cuando definimos una propiedad
normalmente especificamos su nombre y su tipo. Nos podemos hacer a la idea de que las propiedades son algo
así como variables donde almacenamos datos relacionados con los objetos.
Objetos en POO
Los objetos son ejemplares de una clase cualquiera. Cuando creamos un ejemplar tenemos que especificar la
clase a partir de la cual se creará. Esta acción de crear un objeto a partir de una clase se llama instanciar
(que viene de una mala traducción de la palabra instace que en inglés significa ejemplar). Por ejemplo, un
objeto de la clase fracción es por ejemplo 3/5. El concepto o definición de fracción sería la clase, pero
cuando ya estamos hablando de una fracción en concreto 4/7, 8/1000 o cualquier otra, la llamamos objeto.
Para crear un objeto se tiene que escribir una instrucción especial que puede ser distinta dependiendo el
lenguaje de programación que se emplee, pero será algo parecido a esto.
Con la palabra new especificamos que se tiene que crear una instancia de la clase que sigue a continuación.
Dentro de los paréntesis podríamos colocar parámetros con los que inicializar el objeto de la clase coche.
Estados en objetos
Cuando tenemos un objeto sus propiedades toman valores. Por ejemplo, cuando tenemos un coche la
propiedad color tomará un valor en concreto, como por ejemplo rojo o gris metalizado. El valor concreto de
una propiedad de un objeto se llama estado.
Para acceder a un estado de un objeto para ver su valor o cambiarlo se utiliza el operador punto.
miCoche.color = rojo
El objeto es miCoche, luego colocamos el operador punto y por último el nombre e la propiedad a la que
deseamos acceder. En este ejemplo estamos cambiando el valor del estado de la propiedad del objeto a rojo
con una simple asignación.
Mensajes en objetos
Un mensaje en un objeto es la acción de efectuar una llamada a un método. Por ejemplo, cuando le decimos a
un objeto coche que se ponga en marcha estamos pasándole el mensaje “ponte en marcha”.
Para mandar mensajes a los objetos utilizamos el operador punto, seguido del método que deseamos invocar.
miCoche.ponerseEnMarcha()
En este ejemplo pasamos el mensaje ponerseEnMarcha(). Hay que colocar paréntesis igual que cualquier
llamada a una función, dentro irían los parámetros.
Otras cosas
Hay mucho todavía que conocer de la POO ya que sólo hemos hecho referencia a las cosas más básicas.
También existen mecanismos como la herencia y el polimorfismo que son unas de las posibilidades más
potentes de la POO.
La herencia sirve para crear objetos que incorporen propiedades y métodos de otros objetos. Así podremos
construir unos objetos a partir de otros sin tener que reescribirlo todo. Puedes encontrar en
DesarrolloWeb.com un artículo completo dedicado a la Herencia.
El polimorfismo sirve para que no tengamos que preocuparnos sobre lo que estamos trabajando, y abstraernos
para definir un código que sea compatible con objetos de varios tipos. Puedes acceder a otro artículo para
saber más sobre Polimorfismo.
Son conceptos avanzados que cuesta explicar en las líneas de ese informe. No hay que olvidar que existen
libros enteros dedicados a la POO y aquí solo pretendemos dar un repaso a algunas cosas para que os suenen
cuando tengáis que poneros delante de ellas en los lenguajes de programación que debe conocer un
desarrollador del web. Sin embargo, si quieres saber más también puedes continuar leyendo en
DesarrolloWeb.com, en el manual de la teoría de la Programación orientada a objetos.
herencia.
cohesión.
abstracción.
polimorfismo.
acoplamiento.
encapsulación.
La POO tiene sus raíces en la década del 60 con el lenguaje de programación Simula que en
1967, el cual fue el primer lenguaje que posee las características principales de un lenguaje
orientado a objetos.
Smalltalk (de 1972 a 1980) es posiblemente el ejemplo canónico, y con el que gran parte de la
teoría de la POO se ha desarrollado. Más su uso se popularizó a principios de la década de 1990.
Nota
El mecanismo de clases de Python agrega clases al lenguaje con un mínimo de nuevas sintaxis y
semánticas.
En Python las clases es una mezcla de los mecanismos de clase encontrados en C++ y Modula-3.
Como es cierto para los módulos, las clases en Python no ponen una barrera absoluta entre la
definición y el usuario, sino que más bien se apoya en la cortesía del usuario de no “forzar la
definición”.
Sin embargo, se mantiene el poder completo de las características más importantes de las clases:
el mecanismo de la herencia de clases permite múltiples clases base, una clase derivada puede
sobrescribir cualquier método de su(s) clase(s) base, y un método puede llamar al método de la
clase base con el mismo nombre.
En terminología de C++, todos los miembros de las clases (incluyendo los miembros de datos),
métodos: la función método se declara con un primer argumento explícito que representa al
objeto, el cual se provee implícitamente por la llamada.
Como en Smalltalk, las clases mismas son objetos. Esto provee una semántica para importar y
renombrar.
A diferencia de C++ y Modula-3, los tipos de datos integrados pueden usarse como clases base
También, como en C++ pero a diferencia de Modula-3, la mayoría de los operadores integrados
con sintaxis especial (operadores aritméticos, de subíndice, etc.) pueden ser redefinidos por
instancias de la clase.
(Sin haber una terminología universalmente aceptada sobre clases, haré uso ocasional de términos
de Smalltalk y C++. Usaría términos de Modula-3, ya que su semántica orientada a objetos es
más cercana a Python que C++, pero no espero que muchos lectores hayan escuchado hablar de
él).
9.3.2. Objetos
Los objetos son abstracción de Python para data. Toda la data en un programa Python es
representado por objectos o por relaciones entre objectos. (En cierto sentido, y en el código
modelo de Von Neumann de una “computadora almacenada del programa” también es un código
representado por los objetos.)
Cada objeto tiene una identidad, un tipo y un valor. Una identidad de objecto nunca cambia una
vez es creada; usted puede pensar eso como la dirección de objeto en memoria. El
operador in compara la identidad de dos objetos; la función id() devuelve un número entero
representando la identidad (actualmente implementado como su dirección).
El tipo de un objeto también es inmutable. El tipo de un objeto determina las operaciones que
admite el objeto (por ejemplo, “¿tiene una longitud?”) Y también define los valores posibles para
los objetos de ese tipo. La función “type()” devuelve el tipo de un objeto (que es un objeto en sí
mismo). El valor *de algunos objetos puede cambiar. Se dice que los objetos cuyo valor puede
cambiar son *mutables; los objetos cuyo valor no se puede cambiar una vez que se crean se
llaman immutable. (El valor de un objeto contenedor inmutable que contiene una referencia a un
objeto mutable puede cambiar cuando se cambia el valor de este último; sin embargo, el
contenedor todavía se considera inmutable, porque la colección de objetos que contiene no se
puede cambiar. Por lo tanto, la inmutabilidad no es estrictamente lo mismo que tener un valor
incambiable, es más sutil.) La mutabilidad de un objeto está determinada por su tipo; por ejemplo,
los números, las cadenas y las tuplas son inmutables, mientras que los diccionarios y las listas son
mutables.
Los objetos son la clave para entender la POO. Si mira a nuestro alrededor encontrará un sin fin de
objetos de la vida real: perro, escritorio, televisor, bicicleta, etc...
En Python puede definir una clase con la palabra reservada class, de la siguiente forma:
class Persona:
pass
En el ejemplo anterior, el nombre de la clase es Persona y dentro del bloque de código usa la
sentencia pass. Aunque no es requerido por el intérprete, los nombres de las clases se escriben por
convención capitalizadas. Las clases pueden (y siempre deberían) tener comentarios.
Diagrama de Objeto Persona
El conjunto de datos y objetos relacionados con un objeto en un momento dado, se le conoce como
“estado”. Un objeto puede tener múltiples estados a lo largo de su existencia conforme se
relaciona con su entorno y otros objetos.
Por hacer
9.3.3. Atributos
Los atributos o propiedades de los objetos son las características que puede tener un objeto, como
el color. Si el objeto es Persona, los atributos podrían ser: cedula, nombre, apellido, sexo,
etc...
Los atributos describen el estado de un objeto. Pueden ser de cualquier tipo de dato.
class Persona:
cedula = "V-13458796"
nombre = "Leonardo"
apellido = "Caballero"
sexo = "M"
Usted puede probar el código anterior, si lo transcribe en el consola interactiva Python como lo
siguiente:
...
>>> type(macagua)
<type 'classobj'>
>>> dir(macagua)
>>> macagua.cedula
'V-13458796'
>>> macagua.nombre
'Leonardo'
>>> macagua.apellido
'Caballero'
>>> macagua.sexo
'M'
Si el nombre de un atributo esta encerrado entre dobles guiones bajos son atributos especiales.
>>> macagua.__name__
'Persona'
en el formato docstrings.
>>> macagua.__doc__
Si el nombre de un atributo esta con dobles guiones bajos al principio son atributos “escondidos”.
A continuación un pseudo código que ilustra un ejemplo:
>>> ms_windows.__privado
'True'
>>> ms_windows.codigo_fuente.__no_tocar
'True'
9.3.4. Métodos
Los métodos describen el comportamiento de los objetos de una clase. Estos representan las
operaciones que se pueden realizar con los objetos de la clase,
Se definen de la misma forma que las funciones normales pero deben declararse dentro de la clase
y su primer argumento siempre referencia a la instancia que la llama, de esta forma se afirma que
los métodos son funciones, adjuntadas a objectos.
Nota
Usted puede encontrar ejemplos en las funciones de cadena de caracteres, listas, diccionarios, etc.
Si el objeto es Persona, los métodos pueden ser: hablar, caminar, comer, dormir, etc.
class Persona:
cedula = "V-13458796"
nombre = "Leonardo"
apellido = "Caballero"
sexo = "M"
return mensaje
La única diferencia sintáctica entre la definición de un método y la definición de una función es que
el primer parámetro del método por convención debe ser el nombre self.
Usted puede probar el código anterior, si lo transcribe en el consola interactiva Python como lo
siguiente:
...
...
>>>
... macagua.__name__))
>>> type(Persona().hablar)
<type 'instancemethod'>
>>> Persona().hablar.__doc__
Si crea una instancia de objeto para la clase Persona e intenta llamar al método hablar() esto
TypeError: unbound method hablar() must be called with Persona instance as first argument (got str
instance instead)
Por hacer
Los métodos cuentan con un espacio de nombres propio. En caso de no encontrar un nombre en su
ámbito local, buscará en el ámbito superior hasta encontrar alguna coincidencia.
Los métodos pueden acceder y crear atributos dentro del objeto al que pertenecen, anteponiendo
la palabra self y el operador de atributo ”.” antes del nombre del atributo en cuestión.
Las clases en Python cuentan con múltiples métodos especiales, los cuales se encuentran entre
dobles guiones bajos __<metodo>__().
se manda a mostrar, es decir es una cadena representativa de la clase, la cual puede incluir
formatos personalizados de presentación del mismo.
def __str__(self):
self.apellido, self.getGenero(self.sexo))
9.3.4.2.2. __del__()
En ocasiones es necesario contar con métodos que interactúen con elementos de la clase de la
cual el objeto es instanciado. Python permite definir métodos de clase para esto.
Los métodos de clase son aquellos que están ligados directamente con los atributos definidos en la
clase que los contiene. Para definir un método de clase se utiliza el decorador @classmethod y
por convención se utiliza cls como argumento inicial en lugar de self.
Del mismo modo, los métodos de clase utilizan el prefijo cls para referirse a los atributos de la
clase.
class <Clase>(object):
...
...
@classmethod
...
...
9.3.4.4. Métodos estáticos
Los métodos estáticos hacen referencia a las instancias y métodos de una clase. Para definir un
método estático se utiliza el decorador @staticmethod y no utiliza ningún argumento inicial.
Al no utilizar self, los métodos estáticos no pueden interactuar con los atributos y métodos de la
instancia.
Para referirse a los elementos de la clase, se debe utilizar el nombre de la clase como prefijo.
class <Clase>(object):
...
...
@staticmethod
def <metodo>(<argumentos>):
...
...
9.3.4.5. Interfaces
La forma en que los métodos de un objeto pueden ser accedidos por otros objetos se conoce como
“interfaz”. Una interfaz bien definida permite a objetos de distinta índole interactuar entre sí de
forma modular. La interfaz define el modo en que los objetos intercambian información.
Por hacer
9.3.4.6. Implementaciones
Por hacer
Con todos los conceptos anteriores explicados, se puede decir que una clase es una plantilla
genérica de un objeto. La clase proporciona variables iniciales de estado (donde se guardan
los atributos) e implementaciones de comportamiento (métodos) necesarias para crear nuevos
objetos, son los modelos sobre los cuáles serán construidos.
9.3.6. Instancias
Ya sabe que una clase es una estructura general del objeto. Por ejemplo, puede decir que la
clase Persona necesita tener una cedula, un nombre, un apellido y una sexo, pero no va a
decir cual es cedula, nombre, apellido y sexo, es aquí donde entran las instancias.
Una instancia es una copia específica de la clase con todo su contenido. Por ejemplo:
La excepción TypeError indica que el método constructor no toma argumentos, esto se debe a que
la momento de definir la clase a cada atributo se le asigno un valor (tipo de dato).
self.cedula = cedula
self.nombre = nombre
self.apellido = apellido
self.sexo = sexo
9.3.6.2. Función isinstance()
Nota
Usted puede descargar el código usado en esta sección haciendo clic aquí.
Truco
Para ejecutar el código poo.py, abra una consola de comando, acceda al directorio donde se
python poo.py
El diseño de prototipos es una popular técnica de ingeniería utilizada para desarrollar modelos a escala (o
• Los prototipos de vialidad se utilizan para probar la vialidad de una tecnología específica aplicable a un
sistema de información.
• Los prototipos de necesidades (a veces denominados de descubrimiento) se utilizan para descubrir las
necesidades de los usuarios con respecto a la empresa. Pueden simular la forma de pensar de los usuarios. Su
base es sencilla: los usuarios reconocerán sus necesidades cuando las vean, durante la elaboración de
diseños de necesidades, el analista puede pintar pantallas o informes de muestra, y solicitar las opiniones del
• Los prototipos de diseño (a veces denominados prototipos de comportamiento) se utilizan para simular el
diseño del sistema de información final. Mientras que los prototipos de necesidades se centraban solo en el
contenido, los prototipos de diseño lo hacen en la forma y funcionamiento del sistema deseado. Cuando un
analista crea un prototipo de diseño, espera que los usuarios evalúen dicho prototipo como si formara parte
del sistema final. Así, los usuarios deberían evaluar la facilidad de aprendizaje y de manejo del sistema, así
como el aspecto de pantallas y los informes y los procedimientos requeridos para utilizar el sistema. Estos
prototipos pueden servir como especificaciones parciales de diseño o evolucionar hacia prototipos de
implantación.
• Los prototipos de implantación (a veces denominados prototipos de producción) constituyen una extensión
de los prototipos de diseño donde el prototipo evoluciona directamente hacia el sistema de producción. En
principio, los prototipos de implantación omiten normalmente detalles como la edición de datos, las
seguridades y los mensajes de ayuda. Estos detalles pueden añadirse posteriormente, si se desea que el
• Los usuarios se hacen participantes más activos en el desarrollo de sistemas. Suelen mostrarse más
• La definición de necesidades se simplifica por el hecho de que muchos usuarios finales no comprenden o no
son capaces de enunciar detalladamente sus necesidades hasta que ven un prototipo.
• La probabilidad de que los usuarios finales aprueben un diseño y luego rechacen su implantación se reducirá
notablemente .
• Según se dice, el diseño mediante prototipo reduce el tiempo de desarrollo, sin embargo, algunos expertos
Pero para la utilización de prototipos comporta también un riesgo, se suele pasar a las fases de análisis y
diseño con demasiada rapidez. Ello empuja al analista a pasar demasiado rápido a la codificación, sin haber
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”, objetos que son entidades que combinan estado (propiedades o
datos), comportamiento (procedimientos o métodos) e identidad (propiedad del objeto que lo diferencia del
resto). La programación orientada a objetos expresa un programa como un conjunto de estos objetos, que
colaboran entre ellos para realizar tareas. Esto permite hacer los programas y módulos más fáciles de escribir,
mantener y reutilizar.
Elementos de la POO:
-. Objetos: contienen toda la información que permite definirlo e identificarlo frente a otros objetos
pertenecientes a otras clases (e incluso entre objetos de una misma clase, al poder tener valores bien
A su vez, dispone de mecanismos de interacción (los llamados métodos) que favorecen la comunicación entre
objetos (de una misma clase o de distintas), y en consecuencia, el cambio de estado en los propios objetos.
Esta característica lleva a tratarlos como unidades indivisibles, en las que no se separan (ni deben separarse)
-. Atributos: Los atributos son las características individuales que diferencian un objeto de otro y determinan
su apariencia, estado u otras cualidades. Los atributos se guardan en variables denominadas de instancia, y
cada objeto particular puede tener valores distintos para estas variables.
Las variables de instancia también denominados miembros dato, son declaradas en la clase pero sus valores
Además de las variables de instancia hay variables de clase, las cuales se aplican a la clase y a todas sus
instancias. Por ejemplo, el número de ruedas de un automóvil es el mismo cuatro, para todos los automóviles.
-.Mensajes: Corresponde a la forma que tienen los objetos para comunicarse entre sí, de esta forma, el objeto
que activa el mensaje se llama objeto emisor y el que lo recibe objeto receptor. Cabe señalar que un mensaje
debe ser activado o generado desde un método hacia un objeto. En términos generales equivale a la llamada a
un procedimiento o función.
receptor_mensaje.selector_mensaje [(parámetros)]
-. Clases: son declaraciones o abstracciones de objetos, lo que significa, que una clase es la definición de un
Para crear una clase se utiliza la palabra reservada class y a continuación el nombre de la clase. La definición
de la clase se pone entre las llaves de apertura y cierre. El nombre de la clase empieza por letra mayúscula.
class Rectangulo{
//miembros dato
//funciones miembro
-.Instanciación: una instancia se produce con la creación de un objeto perteneciente a una clase (se dice que
se instancia la clase). El objeto que se crea tiene los atributos, propiedades y métodos de la clase a la que
pertenece. Los objetos y sus características se usan en la construcción de programas, ya sea como
-. Abstracción: Mediante la abstracción la mente humana modeliza la realidad en forma de objetos. Para ello
busca parecidos entre la realidad y la posible implementación de objetos del programa que simulen el
Los seres humanos no pensamos en las cosas como un conjunto de cosas menores; por ejemplo, no vemos un
cuerpo humano como un conjunto de células. Los humanos entendemos la realidad como objetos con
comportamientos bien definidos. No necesitamos conocer los detalles de porqué ni cómo funcionan las cosas;
simplemente solicitamos determinadas acciones en espera de una respuesta; cuando una persona desea
Pero la abstracción humana se gestiona de una manera jerárquica, dividiendo sucesivamente sistemas
complejos en conjuntos de subsistemas, para así entender más fácilmente la realidad. Esta es la forma de
-. Encapsulamiento: Uno de los objetivos primordiales de la P.O.O., es la creación de objetos que funcionen
como entidades complejas, es decir autosuficientes, una de las reglas del encapsulamiento es que el
programador nunca necesita acceder directamente a los datos de un objeto, en vez de esto se deben definir
métodos dentro del objeto que gobiernen toda la manipulación de datos. El encapsulamiento está referido,
también, a los métodos de cada objeto en el sentido que su código interno debe ser transparente a la hora de
activarse.
-.Polimorfismo: Se refiere a la capacidad que tiene el objeto para hacer lo adecuado después de haber recibido
un mensaje, independientemente de quién lo haya enviado. Hay que tener en cuenta que el polimorfismo se
mueve a través de la herencia, dicho de otra forma trata de hacer posible enviar mensajes genéricos a objetos
y que éstos realicen lo estipulado de acuerdo a su codificación interna, es decir, la acción varía en relación al
Ejemplo: Se desea enviar un mensaje a dos objetos distintos (Triángulo y Rectángulo) los cuales podrían ser
descendientes de la clase polígono, sin embargo cuando el triángulo reciba la orden área, la ejecución de este
método se obtendrá a partir de (b*h)/2 en cambio si se activa el mismo método para el rectángulo el valor se
calculará a partir de ð *r2 , aún cuando ambos objetos recibieron la misma orden.
-. Herencia: En términos simples la herencia en la P.O.O. es la capacidad que tiene los objetos para heredar
herederos, permitiendo así la reutilización de código lo que en la práctica se traduce en una herramienta muy
potente de programación.
Esta herencia puede ser a nivel de estado (características) o protocolo (métodos y procedimientos) o ambas.
Ejemplo:
Type
edades: 0..150;
InfPersona = RECORD
Apellido: integer;
Nombre: integer;
Edad: edades;
end;
grados: 0..12;
InfEstudiante= RECORD
persona: InfPersona;
grado: Grados;
end;
El registro InfPersona contiene campos que se utilizan para describir a cualquier persona. El segundo registro
InfEstudiante, incluye el campo Persona, que contiene los campos del registro InfPersona. En la P.O.O., se
utiliza el mismo concepto para construir incrementalmente objetos que son capaces de heredar algunas o
Los prototipos son una visión preliminar del sistema futuro que se implantara. La elaboración de prototipos de un sistema de información es una
técnica valiosa para la recopilación rápida de información especifica a cerca de los requerimientos de información de los usuarios. Los prototipos
efectivos deben hacerse tempranamente en el ciclo de vida del desarrollo de sistemas, durante la fase de determinación de requerimientos.
El desarrollo rápido de aplicaciones o RAD (acrónimo en inglés de rapid application development) es un proceso de desarrollo de software,
desarrollado inicialmente por James Martin en1980. El método comprende el desarrollo interactivo, la construcción de prototipos y el uso de
utilidades CASE (Computer Aided Software Engineering). Tradicionalmente, el desarrollo rápido de aplicaciones tiende a englobar también la
usabilidad, utilidad y la rapidez de ejecución.
Caracteristicas de P.O.O
Características de la POO
Abstracción: 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.
Encapsulamiento: Significa reunir a 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.
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 pueden
cambiar el estado interno de un objeto de maneras inesperadas, 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.
Herencia: las clases no están 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. (4)
Conceptos Básicos:
Un objeto es una encapsulación abstracta de información, junto con los métodos o procedimientos para manipularla. Un objeto
contiene operaciones que definen su comportamiento y variables que definen su estado entre las llamadas a las operaciones.
Un método consiste en la implementación en una clase de un protocolo de respuesta a los mensajes dirigidos a los objetos de
la misma. La respuesta a tales mensajes puede incluir el envío por el método de mensajes al propio objeto y aun a otros, también como
Características:
La abstracción: Consiste en la generalización conceptual de un determinado conjunto de objetos y de sus atributos y propiedades,
dejando en un segundo término los detalles concretos de cada objeto. ¿Qué se consigue con la abstracción? Bueno, básicamente pasar del
plano material (cosas que se tocan) al plano mental (cosas que se piensan).
La encapsulación: Se refiere a la capacidad de agrupar y condensar en un entorno con límites bien-definidos distintos elementos. Cuando
hablemos de encapsulación en general siempre nos referiremos, pues, a encapsulación abstracta. De manera informal, primero
generalizamos (la abstracción) y luego decimos: la generalización está bien, pero dentro de un cierto orden: hay que poner límites (la
encapsulación), y dentro de esos límites vamos a meter, a saco, todo lo relacionado con lo abstraído: no sólo datos, sino también métodos,
comportamientos, etc.
Por un lado es una abstracción pues, de acuerdo con la definición establecida anteriormente, es en ésta donde se definen las propiedades y
atributos genéricos de determinados objetos con características comunes (recordemos el ejemplo de la sala de cine). La Clase es, por otro
lado, una encapsulación porque constituye una cápsula o saco que encierra y amalgama de forma clara tanto los datos de que constan los
objetos como los procedimientos que permiten manipularlos. Las Clases se constituyen, así, en abstracciones encapsuladas.
La herencia: Se aplica sobre las clases. O sea, de alguna forma las clases pueden tener descendencia, y ésta heredará algunas
características de las clases “padres”. Si disponemos las clases con un formato de árbol genealógico, tenderemos lo que se denomina una
La OOP promueve en gran medida que las relaciones entre objetos se basen en construcciones jerárquicas. Esto es, las clases pueden
heredar diferencialmente de otras clases (denominadas “superclases”) determinadas características, mientras que, a la vez, pueden definir
las suyas propias. Tales clases pasan, así, a denominarse “subclases” de aquéllas.
La herencia se implementa mediante un mecanismo que se denomina derivación de clases: las superclases pasan a llamarse clases base,
mientras que las subclases se constituyen en clases derivadas. El mecanismo de herencia está fuertemente entroncado con la reutilización
del código en OOP. Una clase derivada posibilita, el fácil uso de código ya creado en cualquiera de las clases base ya existentes.
El concepto de herencia constituye un estrato básico del paradigma de objetos, pero esto no significa que todas las relaciones entre clases
en OOP deban ajustarse siempre a este modelo jerárquico. Es necesario establecer si la pretendida relación entre objetos es de pertenencia
de funciones distintas a través del mismo interfaz. O sea, que, en la práctica, un mismo identificador puede tener distintas formas (distintos
cuerpos de función, distintos comportamientos) dependiendo, en general, del contexto en el que se halle inserto.
El polimorfismo se puede establecer mediante la sobrecarga de identificadores y operadores, la ligadura dinámica y las funciones virtuales.
El término sobrecarga se refiere al uso del mismo identificador u operador en distintos contextos y con distintos significados.
La sobrecarga de funciones conduce a que un mismo nombre pueda representar distintas funciones con distinto tipo y número de
argumentos. En el ámbito de la OOP, la sobrecarga de funciones equivale a que un mismo mensaje puede ser enviado a objetos de
La sobrecarga de operadores permite, por otro lado, el desarrollo de un código más coherente, como especialización de la sobrecarga de
funciones, posibilitando la re-definición (para tipos de datos definidos-por-el-usuario) de las operaciones realizadas por éstos (+, -, *, >,
etc.). Esto es, ocurre lo mismo que en la sobrecarga de funciones, pero aquí, en vez de identificadores de funciones, tenemos operadores.
Gracias a la ligadura dinámica, pueden invocarse operaciones en objetos obviando el tipo actual del éstos hasta el momento de la ejecución
Características de la P.O.O.:
No hay un acuerdo aceptado por todo el mundo respecto a cuáles son las
características que definen la POO, pero al menos todos concuerdan en
estas tres:
1. Abstracción.
2. Encapsulación.
3. Herencia.
Abstracción:
Encapsulación:
Herencia:
La herencia nos permite, entre otras cosas, evitar tener que escribir el
mismo código una y otra vez, puesto que al definir que una categoría (que
en programación llamaremos clase) pertenece a otra, automáticamente
estamos atribuyéndoles las características generales de la primera, sin
tener que definirlas de nuevo.(7)