POO
martes, 5 de julio de 2016
"INTRODUCCION"
El siguiente artículo es una visión de las
funcionalidades de la orientación a objetos, cuyos fines son escolares
La programación orientada a objetos (POO)
ofrece elementos que facilitan el desarrollo de software en aspectos tales como
modularización, reutilización de piezas de código y encapsulamiento
"OBJETO"
En el paradigma de programación orientada a
objetos (POO, o bien OOP en inglés), un objeto es una unidad dentro de un
programa de computadora que consta de un estado y de un comportamiento, que a
su vez constan respectivamente de datos almacenados y de tareas realizables
durante el tiempo de ejecución. Un objeto puede ser creado instanciando una
clase, como ocurre en la programación orientada a objetos, o mediante escritura
directa de código y la replicación otros objetos, como ocurre en la
programación basada en prototipos.
Estos objetos interactúan unos con otros, en
contraposición a la visión tradicional en la cual un programa es una colección
de subrutinas (funciones o procedimientos), o simplemente una lista de
instrucciones para el computador. Cada objeto es capaz de recibir mensajes,
procesar datos y enviar mensajes a otros objetos de manera similar a un
servicio.
En el mundo de la programación orientada a
objetos (POO), un objeto es el resultado de la instanciación de una clase.1 Una
clase es el anteproyecto que ofrece la funcionalidad en ella definida, pero
ésta queda implementada sólo al crear una instancia de la clase, en la forma de
un objeto. Por ejemplo: dado un plano para construir sillas (una clase de
nombre clase_silla), entonces una silla concreta, en la que podemos sentarnos,
construida a partir de este plano, sería un objeto de clase_silla. Es posible
crear (construir) múltiples objetos (sillas) utilizando la definición de la
clase (plano) anterior. Los conceptos de clase y objetos son análogos a los de
tipo de datos y variable; es decir, definida una clase podemos crear objetos de
esa clase, igual que disponiendo de un determinado tipo de dato (por ejemplo el
tipo entero),
podemos definir variables de dicho tipo:
int a,b;
( 'int' es un tipo de dato y 'a' y 'b' son
variables de tipo entero con las que podemos operar)
Para utilizar la funcionalidad definida en
una clase en particular (salvo en las clases abstractas), primeramente es
necesario crear un objeto de esa clase. De la misma manera, para una persona
que desea sentarse, las especificaciones para construir una silla serán de poca
utilidad; lo que se necesita es una silla real construida a partir de esas
especificaciones. Siguiendo con la analogía anterior, también se puede decir
que para hacer operaciones aritméticas, de nada sirve por sí solo el tipo
entero (int); para ello necesitamos variables (o constantes) con las que
operar. 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 atributos y sus valores 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).
Relaciones entre objetos
Como ya se ha dicho antes, un sistema
orientado a objetos está caracterizado por objetos que interactúan entre sí.
Estas interacciones suponen ciertos tipos de relaciones entre los objetos del
sistema. La semántica que expresa un objeto en el sistema está determinada, en
primer lugar, por las relaciones que éste establece con otros objetos o
conjuntos de objetos. Tomemos como ejemplo un objeto fecha, del que sin
establecer ningún tipo de relación, podría decirse que significa un día del año
particular. Pero si relacionamos ese objeto fecha con un objeto Persona de
manera que represente la fecha en que esa persona nació, en ese contexto dado,
el mismo objeto fecha adoptaría un significado diferente, el de un cumpleaños;
aunque sigue siendo una fecha, ahora tiene otra idea asociada. Las relaciones
entre objetos no solo están definidas por los objetos que participan y la
circunstancia que los relaciona, sino también por la cantidad de objetos
(cardinalidad de la relación) y la dirección de la misma. Una relación puede
tener cardinalidad:
uno a uno, ejemplo: un auto tiene un motor.
uno a muchos, ejemplo: un auto tiene muchas
ruedas.
muchos a muchos, ejemplo: un auto se puede
servir en muchas gasolineras y una gasolinera puede servir a muchos autos.
y direccionalidad:
unidireccional, ejemplo: un auto tiene cuatro
ruedas.
bidireccional
Las relaciones entre objetos más generales
son las siguientes:
Composición
La composición (también conocida como
relación asociativa) es un tipo de relación que se establece entre dos objetos
que tienen comunicación persistente. Se utiliza para expresar que un par de
objetos tienen una relación de dependencia para llevar a cabo su función, de
modo que uno de los objetos involucrados está compuesto por el otro.
De manera práctica, es posible reconocer
asociatividad entre dos objetos A y B si la proposición "A tiene un
B" (o viceversa) es verdadera. Por ejemplo: "una computador tiene un
disco duro" es verdadero; por tanto, un objeto computador tiene una
relación de composición con al menos un objeto disco duro.
Uso
Un objeto usa (conoce) a otro cuando puede
enviarle mensajes, por ejemplo, para requerir de este algún servicio. La
composición puede verse como un caso particular de esta relación.
Delegación
En ocasiones, para lograr flexibilidad de
diseño, un objeto es implementado de forma tal que este delegue parte de su
funcionalidad en otro objeto. Esto es muy común en aplicaciones que hacen uso
de interfaces gráficas de usuario, en las que los controles gráficos generales
delegan la acción que se ejecutará ante determinado estímulo en otro objeto.
Operando con un objeto[editar]
Una vez que tenemos un objeto de
'Aritmetica', podemos usarlo para realizar cálculos sobre dos números. En C++
contamos con dos objetos de ejemplo: "calculador" y
"calculador1"; en esta última variable en realidad hemos almacenado
la dirección de memoria del objeto creado. En este lenguaje esto sienta
diferencias a la hora de utilizar el objeto.
Para calcular la suma entre 78 y 69 usando un objeto "calculador" necesitaríamos un código como el siguiente en C++:
int resultado = 0;
resultado = calculador.sumar(78, 69);
#Otra manera usando punteros
resultado = calculador1->sumar(78, 69);
ahora usando Python para sumar dos números
con el objeto calculador:
resultado = calculador.sumar(78, 69)
Otro ejemplo del mundo real de un objeto
podría ser "mi perro", el cual es una instancia de un tipo (una
clase) llamada "perro", la que es una subclase de la clase
"animal". En el caso de un objeto polimórfico, algunos detalles de su
tipo pueden ser ignorados; por ejemplo, el objeto "mi perro" puede
ser usado en un método que espera recibir un "animal". También podría
usarse un objeto "gato", puesto que esta también pertenece a la clase
"animal". Pero mientras es accedido como un "animal",
algunos atributos de un "perro" o un "gato" permanecerán no
disponibles, como la "cola", porque no todos los animales tienen
cola.
"OBJETO"Explicacion..
"CLASE"
En informática, una clase es una plantilla para la
creación de objetos de datos según un modelo predefinido. Las clases se
utilizan para representar entidades o conceptos, como los sustantivos en el
lenguaje. Cada clase es un modelo que define un conjunto de variables -el
estado, y métodos apropiados para operar con dichos datos -el comportamiento.
Cada objeto creado a partir de la clase se denomina instancia de la clase.
Las clases son un pilar fundamental de la programación
orientada a objetos. Permiten abstraer los datos y sus operaciones asociadas al
modo de una caja negra. Los lenguajes de programación que soportan clases
difieren sutilmente en su soporte para diversas características relacionadas
con clases. La mayoría soportan diversas formas de herencia. Muchos lenguajes
también soportan características para proporcionar encapsulación, como
especificadores de acceso.
Una clase también puede tener una representación
(metaobjeto) en tiempo de ejecución, que proporciona apoyo en tiempo de
ejecución para la manipulación de los metadatos relacionados con la clase.
Componentes[editar]
Las clases se componen de elementos, llamados
genéricamente «miembros», de varios tipos:
campos de datos: almacenan el estado de la clase por
medio de variables, estructuras de datos e incluso otras clases.
métodos: subrutinas de manipulación de dichos datos.
ciertos lenguajes permiten un tercer tipo de miembro: las
«propiedades», a medio camino entre los campos y los métodos.
Utilizando un símil con el lenguaje, si las clases
representan sustantivos, los campos de datos pueden ser sustantivos o
adjetivos, y los métodos son los verbos.
EJEMPLO:
La sintaxis típica de una clase es:
class Nombre {
// Variables
miembro (habitualmente privadas)
miembro_1;
//lista de miembros
miembro_2;
miembro_3;
// Funciones o
métodos (habitualmente públicas)
funcion_miembro_1( ); // funciones miembro conocidas
funcion_miembro_2 ( ); // funciones como métodos
// Propiedades
(habitualmente públicas)
propiedad_1;
propiedad_2;
propiedad_3;
propiedad_4;
}
Campos de datos
Los campos de datos se utilizan para contener datos que
reflejan el estado de la clase. Los datos pueden estar almacenados en
variables, o estructuras más complejas, como structs, uniones e incluso otras
clases.
Habitualmente, las variables miembro son privadas al
objeto (siguiendo las directrices de diseño del Principio de ocultación) y su
acceso se realiza mediante propiedades o métodos que realizan comprobaciones
adicionales.
Métodos en las clases
Los métodos implementan la funcionalidad asociada al
objeto. Los métodos son el equivalente a las funciones en programación
estructurada. Se diferencian de ellos en que es posible acceder a las variables
de la clase de forma implícita.
Cuando se desea realizar una acción sobre un objeto, se
dice que se le manda un mensaje invocando a un método que realizará la acción.
Propiedades
Las propiedades son un tipo especial de métodos. Debido a
que suele ser común que las variables miembro sean privadas para controlar el
acceso y mantener la coherencia, surge la necesidad de permitir consultar o
modificar su valor mediante pares de métodos: GetVariable y SetVariable.
Los lenguajes orientados a objetos más modernos (por ejemplo Java o C#) añaden la construcción de propiedad, que es una sintaxis simplificada para dichos métodos:
tipo Propiedad {
get {
}
set {
}
}
Declaración de una clase
Esta clase podría ser definida de la siguiente manera en
C++:
class Aritmetica
{
public:
inline int sumar (int a, int b) const
{
return a + b;
}
inline int restar (int a, int b) const
{
return a - b;
}
inline float multiplicar (int a, int b)
const
{
return a * b;
}
inline float dividir (int a, int b)
const
{
return
a / b;
}
};
o como sigue en Python:
class Aritmetica:
def sumar(self, a, b):
return a + b
def restar(self, a, b):
return a - b
def multiplicar(self, a, b):
return a * b
def dividir(self, a, b):
return a / b
Instanciación de una clase en un objeto
Para crear un objeto de tipo 'Aritmetica' (instanciar Aritmetica) en C++ se haría de la siguiente forma:
Aritmetica calculador = Aritmetica();
#Otra manera usando punteros
Aritmetica* calculador1 = new Aritmetica();
la misma operación usando python sería así:
calculador = Aritmetica()
"INTRODUCCIÓN A CLASES EN POO"
HERENCIA
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).
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.
"HERENCIA EXPLICACIÓN"
CONCEPTOS FUNDAMENTALES
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. En el caso de los componentes registrados
como "protegidos" (protected) también se heredan, pero solo para esa
clase, no para futuras clases heredadas. 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).
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.
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.
"CONCEPTOS "YOUTUBE"
"CUESTIONARIO"
Preguntas clave "CARACTERÍSTICAS DE LA POO"
Elije la respuesta correcta...
1.-¿Qué es una abstracción?
a) Denota las características esenciales de un objeto, donde se capturan
sus comportamientos
b) La técnica por la cual el entorno de objetos se encarga de destruir
automáticamente
c) Programación Orientada a Objetos como C++ u Object.
2.-¿Que es un Encapsula-miento?
a) 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.
b) Significa
reunir todos los elementos que pueden considerarse pertenecientes a una misma
entidad, al mismo nivel de abstracción.
c) La técnica por la cual el entorno de objetos se encarga
de destruir automáticamente
3.-¿Característica de un Polimorfismo?
a) Denota las características esenciales de un objeto, donde
se capturan sus comportamientos
b) 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.
c) 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
4.-¿Que es una herencia?
a) 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.
b) Se denomina "modularidad" a la propiedad que
permite subdividir una aplicación en partes más pequeñas (llamadas módulos)
c) La recolección de basura (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.
5.-¿Característica de una modularidad?
a) 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.
b) 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.
c) La recolección de basura (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.
6.-¿Qué es un principio de ocultación?
a) La recolección de basura (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.
b) 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
c) 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.
Suscribirse a:
Comentarios (Atom)





