Está en la página 1de 8

República Bolivariana de Venezuela.

Ministerio del Poder Popular Para La Educación Universitaria.


Aldea Universitaria Willian Lara "Misión Sucre"
4toTrimestre de Informática - Período II - Sección: E
El Socorro – Estado Guárico.

Lenguaje de
Programacion
Orientada a
Objeto…

Facilitador: Participante:
Rommel Roman Cuarez Fernando
El Socorro, Noviembre de 2016

CARACTERÍSTICAS

ABSTRACCIÓN

Ignorancia Selectiva

 La abstracción nos ayuda a trabajar con cosas complejas

 Se enfoca en lo importante

 Ignora lo que no es importante (simplifica)

Una clase es una abstracción en la que:

 Se enfatizan las características relevantes

 Se suprimen otras características

Una clase debe capturar una y solo una abstracción clave

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.

HERENCIA

Es una relación entre clases en la cual una clase comparte la estructura y


comportamiento definido en otra clase (Grady Booch)

Cada clase que hereda de otra posee:

 Los atributos de la clase base además de los propios

 Soporta todos o algunos de los métodos de la clase base

Una subclase hereda de una clase base

La herencia (en la POO) es una potente arma que podemos utilizar para varias cosas,
entre ellas, por ejemplo, ahorrar líneas de código heredando de otras clases,
compartiendo variables miembro o función miembro. También podemos generar
superclases abstractas para definir comportamientos genéricos que necesitemos. La
herencia es una de las características que más se hace notar a la hora de escribir
código, o reutilizar código de otros programadores. (1)

ENCAPSULAMIENTO

Principio que establece que los atributos propios de un objeto no deben ser
visibles desde otros objetos

 Deben ser declarados como privados

Permite abstraer al resto del mundo de la complejidad de la implementación


interna

Permite exponer el estado del objeto sólo a través del comportamiento que le
hayamos definido mediante miembros públicos

¿Por qué es útil?

 Punto de Control/Validación

 Mejor respuesta ante los Cambios

Otro de los pilares de la orientación a objetos es el encapsulamiento. Para entender


este principio veamos un ejemplo práctico:

Como todos ustedes se imaginarán, no es necesario ser mecánico de automóviles para


poder manejar uno. Si el comprender cómo es el funcionamiento interno del motor, la
dirección, los frenos, los cilindros, etc. fuera requisito para poder manejar un
automóvil, serían muchos menos los conductores certificados y sería mucho más difícil
aprender a manejar. Es más, si a cualquier automotriz se le ocurriera cambiar el
funcionamiento interno de alguna de estas cosas, probablemente todos los
conductores tendrían que volver a aprender como funciona el nuevo componente
interno para poder seguir manejando sin problemas. Por suerte esto no es así, ya que
la complejidad interna del funcionamiento de un automóvil está escondida de los
conductores (usuarios). Para poder interactuar con el automóvil, éste nos expone una
interfaz sencilla y definida, que no cambia nunca por más que cambien internamente
el funcionamiento de sus componentes. Esta interfaz está compuesta por el volante,
los pedales, la palanca de cambios, el asiento, etc. De esta forma decimos que el
automóvil ha encapsulado su complejidad interna.

POLIMORFISMO

Es la propiedad que tienen los objetos de permitir invocar genéricamente un


comportamiento (método) cuya implementación será delegada al objeto
correspondiente recién en tiempo de ejecución
El polimorfismo tiende a existir en las relaciones de herencia, pero no siempre
es así

Transpor
te
Avanzar
Fren
ar

Transporte
Avanzar
Transpor
te
Avanzar

Frenar
Fren
ar

Transpor
te
Avanzar
Fren
ar

Ejemplo:

Aquí tenemos un ejemplo práctico de la implementación de polimorfismo en un diseño


orientado a objetos. Por un lado tenemos la clase base “Transporte”, que posee los
métodos “Avanzar” y “Frenar”. Por otro lado tenemos tres clases distintas derivadas
de la clase “Transporte”, cada una de las cuales podrá sobrescribir la implementación
de los métodos Avanzar y Frenar para que su comportamiento sea más específico.

Ahora bien, como todas heredan de la misma clase base, las clases derivadas pueden
ser tratadas genéricamente. Esto quiere decir que podríamos tener un array que
almacene objetos de tipo Transporte, y recorrerlo luego para llamar al método
“Avanzar” de cada uno. De esta forma, en tiempo de codificación es imposible saber a
qué método “Avanzar” se está llamando en realidad (al del Auto? Al del caballo? Al del
transbordador?), sino que esta decisión es tomada en tiempo de ejecución en base al
tipo particular de objeto que esté instanciado.

En pseudocódigo, esto se escribiría de la siguiente manera:

Definir arrayTransportes (3) de tipo Transporte

arrayTransportes(1) = nuevo Automóvil() //Un automóvil ES UN TIPO DE transporte

arrayTransportes(2) = nuevo Transbordador() //Un Transbordador ES UN TIPO DE


transporte

arrayTransportes(3) = nuevo Caballo() //Un Caballo ES UN TIPO DE transporte

Por Cada (Transporte t en arrayTransportes)

t.Avanzar()

t.Frenar()
Fin

OBJETOS Y CLASES

Un objeto es un elemento independiente de un programa de computadora, que


representa a un grupo asociado de características y esta diseñado para realizar tareas
específicas.  A los objetos también se les conoce como instancias.

La programación orientada a objetos se basa en la observación de, en el mundo real,


los objetos se construyen a partir de objetos más pequeños. Sin embargo, la capacidad
de combinar objetos es sólo un aspecto general de dicha programación. También
incluye conceptos y características que hacen que la creación y el uso de objetos sea
más sencilla y flexible. La clase es la más importante.

Una clase es una plantilla que se utiliza para crear múltiples objetos con características
similares.

Las clases engloban  todas las características de un conjunto particular de objetos.


Cuando escribe un programa en un lenguaje orientado a objetos, usted no define
objetos individuales, sino que define clases de objetos.

Por fortuna, no hay que empezar desde cero. La mayoría de los lenguajes orientados a
objetos incluyen un grupo de clases que implementan la mayoría de la funcionalidad
básica que necesitará.  A estas agrupaciones se les denomina bibliotecas.

Una biblioteca de clases es un grupo de clases diseñadas para su uso con otros
programas.

La reutilización es uno de los  beneficios de mayor importancia en la programación


orientada a objetos.

ÁMBITO DE UNA CLASE

Una clase actúa como cualquier otro tipo de dato con respecto al ámbito. Todos los
miembros de una clase se dice que están en el ámbito de esa clase; cualquier miembro
de una clase puede referenciar a cualquier otro miembro de la misma clase.

Las funciones miembro de una clase tienen acceso no restringido a los miembros dato
de esa clase. El acceso a los miembros dato y funciones de una clase fuera del ámbito
de la clase está controlado por el programador. La idea es encapsular la estructura de
datos y funcionalidad de una clase, de modo que el acceso a la estructura de datos de
la clase desde fuera de las funciones miembro de la clase, sea limitada o innecesaria.

El nombre de la clase tiene que ser único dentro de su ámbito.

Especificadores de acceso a los miembros de una clase


En una definición de clase, un especificador de acceso se utiliza para controlar la
visibilidad de los miembros de una clase fuera del ámbito de la clase.

Los miembros de una clase pueden ser públicos, privados o protegidos. Las palabras
reservadas public, private y protected se utilizan para controlar el modo de acceso a la
clase.

Dentro de una declaración de clase, cada una de estas palabras se puede utilizar para
preceder a una o más declaraciones de los miembros de una clase:
- Acceso protegido. Los miembros protegidos significan que sólo se puede acceder a
ellos por funciones miembro dentro de la misma clase y por funciones miembro de
clases derivadas de esta clase.
- Acceso público. Los miembros públicos son accesibles por cualquier parte del
programa.
- Acceso privado. Los miembros privados sólo pueden ser utilizados por las funciones
miembro de la clase y las funciones amigas de la clase.

Funciones miembro

Las funciones miembro son miembros de una clase y son funciones diseñadas para
implementar las operaciones permitidas sobre los tipos de datos de una clase. Para
declarar una función miembro hay que situar su prototipo en el cuerpo de la clase. No
hay que definir la función dentro de la clase; dicha definición puede estar fuera de la
clase e incluso en un archivo independiente, aunque también pueden ser definidas en
línea dentro de la clase.

Las funciones miembro son necesarias para acceder a los datos privados. En general,
son públicas; si no lo fueran, ninguna otra función podría llamarlas. Se pueden declarar
para devolver valores con tipos incluyendo objetos de clases, punteros o referencias.
Pueden ser declaradas también para aceptar cualquier número y tipo de argumentos.
Los argumentos por defecto están permitidos, así como la notación de puntos
suspensivos.

El puntero this

Nunca se puede llamar a una función miembro privada de una clase a menos que se
asocie con un objeto. En C cada vez que se utiliza un puntero para acceder a los
miembros de una estructura, debe utilizarse el operador de puntero (->) para acceder
a los datos. ¿Cómo sabe una función miembro cuál es la instancia de una clase
asociada con ella?

El método utilizado por C++ es añadir un argumento extra oculto a las funciones
miembro. Este argumento es un puntero al objeto de la clase que lo enlaza con la
función asociada y recibe un nombre especial denominado this.

Dentro de una función miembro, this apunta al objeto asociado con la invocación de la
función miembro. El tipo de this en una función miembro de una clase T es T *const es
decir, un puntero constante a un objeto de tipo T.
Normalmente, el programador no necesita preocuparse por este puntero, ya que C++
realiza la operación automáticamente, haciendo el uso de this transparente a las
funciones miembro que la utilizan. Dentro de una función miembro, se pueden hacer
referencias a los miembros del objeto asociado a ella con el prefijo this y el operador
de acceso ->. Sin embargo, este proceso no es necesario, ya que es redundante.
Consideremos como ejemplo el constructor de una clase que manipula números
complejos:

complejo::complejo (float a,float b)


{
real=a;
imag=b;
}

Este constructor se puede escribir:


complejo::complejo (float a,float b)
{
this->real=a;
this->imag=b;
}
this->nombre_miembro : apunta a un miembro
*this : es el objeto total. Es un valor constante
this : es la dirección del objeto apuntado

IMPLEMENTACIÓN DE UNA CLASE

Después de declarar una clase se deben implementar (escribir el código de) sus
funciones y procedimientos, así como su constructor y su destructor.

El código de las funciones y procedimientos de una clase se escribe igual que el de las
funciones y procedimientos habituales, teniendo únicamente en cuenta que el nombre
de la función o procedimiento que se debe indicar será:

Nombre_Clase.Nombre_Procedimiento_o_Funcion

Es decir, el nombre de la clase seguido de un punto y del nombre del procedimiento o


función.

Por su parte, el constructor y el destructor se implementan de la misma forma y como


si fueran procedimientos, pero utilizando las instrucciones constructor y destructor
respectivamente en vez de la instrucción procedimiento.

CONSTRUCTORES Y DESTRUCTORES (INICIALIZACIÓN DE CLASES I)

Son métodos que permiten establecer el estado inicial y final de un objeto. Los
constructores se pueden definir con un conjunto de argumentos arbitrario, pero no
pueden devolver nada. Y los destructores no pueden recibir ni devolver ningún valor.
El constructor debe llamarse igual que la clase, y el destructor el nombre de la clase
precedido del carácter ~

Un constructor se ejecuta cuando se crea un nuevo objeto: 1) por declaración, ó 2)


cuando se crea dinámicamente con el operador new. Un destructor se ejecuta cuando
el objeto deja de existir: 1) porque su ámbito acaba, ó 2) cuando se libera
explícitamente con el operador delete.

En ObjGraf.h:

class TObjGraf {
...

// Constructor de objetos TObjGraf

TObjGraf (TPaintBox *_PaintBox, TColor _Color=clBlack,


int _X=0, int _Y=0);

// El destructor sería: ~TObjGraf (void);


};

En ObjGraf.cpp:

TObjGraf :: TObjGraf (TPaintBox * _PaintBox, TColor _Color,


int _X, int _Y)
{
PaintBox = _PaintBox;
Color = _Color;
X = _X;
Y = _Y;
}

En Ppal.cpp:

void __fastcall TPpalFrm::FormCreate(TObject *Sender)


{
ObjGraf = new TObjGraf (PaintBox, clRed, 10, 10);
}

Importante: No es necesario escribir un destructor salvo si el objeto requiere memoria


dinámica adicional. De ser así, la tarea del destructor será, básicamente, liberar la
memoria dinámica que ocupa el objeto que se va a destruir.

También podría gustarte