Sei sulla pagina 1di 38

Programación Orientada a Objetos

(POO)
ID: 192954

Francisco Javier Díaz Hernández

Ing. Robótica
Programación Orientada o Objetos (POO)
Conceptos básicos

La programación Orientada a objetos 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.
Programación Orientada o Objetos (POO)
Conceptos básicos

Los elementos de la POO, pueden entenderse como los materiales que


necesitamos para diseñar y programar un sistema, mientras que las
características, podrían asumirse como las herramientas de las cuáles
disponemos para construir el sistema con esos materiales.

Entre los elementos principales de la POO, podremos encontrar a:


Clases

Las clases son uno de los principales componentes de un lenguaje de


programación, pues en ellas ocurren todos los procesos lógicos requeridos
para un sistema, en si podemos definirlas como estructuras que
representan objetos del mundo real, tomando como objetos a personas,
lugares o cosas, en general las clases poseen propiedades,
comportamientos y relaciones con otras clases del sistema.
Clases
Una clase se compone por tres
partes fundamentales: En java se representa así:

Nombre : Contiene el Nombre


de la Clase.
Atributos : Representan las
propiedades que caracterizan la
clase.
Métodos : Representan el
comportamiento u
operaciones, la forma como
interactúa la clase con su
entorno.
c
Objeto
Los objetos representan una entidad concreta o abstracta del mundo real,
en programación básicamente se le conoce como la instancia de una clase
en si es lo que da el sentido a estas.

Al igual que las clases se componen de tres partes fundamentales:

• Estado: Representa los atributos o características con valores concretos


del objeto.
• Comportamiento : Se define por los métodos u operaciones que se
pueden realizar con el.
• Identidad : Es la propiedad única que representa al objeto y lo
diferencia del resto.
Objeto
En java se representa creando una instancia de la clase por medio de la
palabra new al hacer eso creamos el objeto de la clase y podemos hacer
uso de los métodos o atributos de esta (dependiendo de la visibilidad de
los mismos ) por medio de un punto (.) así:
Atributos

Los atributos forman parte de la estructura interna de un objeto, estos


describen el estado del objeto. Un atributo consta de dos partes, un
nombre de atributo y un valor de atributo.
Los objetos simples pueden constar de tipos primitivos, tales como
enteros, caracteres, boolen, etc. Los objetos complejos pueden constar de
pilas, conjuntos, listas, arrays, etc, o incluso de estructuras recursivas de
alguno o todos de sus elementos.
Métodos
Los métodos (operaciones o servicios) son otra de las partes
que conforman la estructura interna de un objeto y describen
el comportamiento asociado a un objeto.
Cada método tiene un nombre y un cuerpo que realiza la
acción o comportamiento asociado con el nombre del método.
En un POO, el cuerpo de un método consta de un bloque de
código procedimental que ejecuta la acción requerida.
Abstracción de datos

La abstracción consiste en aislar un elemento de su contexto o del resto


de los elementos que lo acompañan. En programación, el término se
refiere al énfasis en el "¿qué hace?" más que en el "¿cómo lo hace?" . El
común denominador en la evolución de los lenguajes de programación,
desde los clásicos o imperativos hasta los orientados a objetos, ha sido el
nivel de abstracción del que cada uno de ellos hace uso.
Abstracción de datos
Por ejemplo una analogía sería modelizar un coche en un esquema de
POO. Diríamos que el coche es el elemento principal que tiene una serie
de características, como podrían ser el color, el modelo o la marca.
Además tiene una serie de funcionalidades asociadas, como pueden ser
ponerse en marcha, parar o aparcar. 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.
Construcción de Clases
La clase es la construcción del lenguaje utilizada más frecuentemente para
definir los tipos abstractos de datos en lenguajes de programación
orientados a objetos. Generalmente, una clase se puede definir como una
descripción abstracta de un grupo de objetos, cada uno de los cuales se
diferencia por un estado específico y es capaz de realizar una serie de
operaciones.
En programación, una clase es una estructura que contiene datos y
procedimientos ( o funciones) que son capaces de operar sobre esos
datos. Dentro de un programa, las clases tienen dos propósitos
principales: definir abstracciones y favorecer la modularidad.
Construcción de Clases
Componentes de una clase
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.
Construcción de Clases
Componentes de una clase
Sintaxis de una clase:
Construcción de Clases
Componentes de una clase
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
y su acceso
se realiza mediante propiedades o métodos que realizan
comprobaciones adicionales.
Construcción de Clases
Componentes de una clase
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.
Construcción de Clases
Componentes de una clase
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
añaden la construcción de propiedad, que es una
sintaxis simplificada para dichos métodos.
Construcción de clases
Datos y Funciones miembro
Igual que con las clases normales, es posible declarar datos miembro o
funciones estáticas dentro de una plantilla. En este caso existirá una copia de
cada uno de ellos para cada tipo de instancia que se cree.
Por ejemplo, si añadimos un miembro static en nuestra declaración de "Tabla",
se creará una única instancia de miembro estático para todas las instancias de
Tabla<int>, otro para las instancias de Tabla<Cadena>, etc.

El nombre de las funciones miembro o métodos comieza por letra minúscula y


deben sugerir acciones (mover, calcular, etc.). La definición de una función tiene
el siguiente formato:

tipo nombreFuncion(tipo parm1, tipo parm2, tipo parm3){


//...sentencias
}
Construcción de clases
Datos y Funciones miembro
Por ejemplo:
Construcción de clases
Datos y Funciones miembro
Probando los miembros estáticos de nuestra clase
Construcción de clases
Constructor y Destructor
Constructor
Un método constructor es aquél que un objeto llama cuando es creado, es decir,
cuando se construye.

Un constructor tiene las siguientes características:

• Siempre tienen el mismo nombre que la clase


• No tienen tipo de regreso
• El objetivo de un constructor es el de inicializar un objeto cuando éste es creado.
Asignaremos los valores iniciales así como los procesos que ésta clase deba realizar.
• Se utiliza para crear tablas de métodos virtuales y poder así desarrollar el
polimorfismo, una de las herramientas de la programación orientada a objetos. Al
utilizar un constructor, el compilador determina cual de los objetos va a responder al
mensaje (virtual) que hemos creado.
• Tiene un tipo de acceso, un nombre y un paréntesis.
Construcción de clases
Constructor y Destructor
Destructor
Un método destructor es aquel que se ejecuta al eliminar un objeto de
memoria.

Tiene como características

• No devuelve nada
• Se llama igual que la clase, precedido de ~ y con () por se método
• Se usa para liberar memoria dinámica, cerrar ficheros.
• Hay un destructor por defecto
Construcción de clases
Constructor y Destructor
Construcción de clases
Ámbito y acceso a los miembros de una clase (public, private, protected)

Toda variable/función tiene un rango de acción, se encuentra en un sitio,


tiene un contexto, fuera del cual pierde significado y valor. Un ejemplo
que puede ilustrar esto puede ser un lámpara. La lámpara, al encenderla,
ilumina un área específica, pero no tiene influencia fuera de esa área.

De acuerdo con su ámbito una variable/función puede ser:


• Pública
• Privada
• Protegida
Construcción de clases
Ámbito y acceso a los miembros de una clase (public, private, protected)

Public

Una variable/función pública puede ser accedida desde fuera de la clase.


Es decir, puedo acceder desde la instancia de la clase y no sólo desde el
código interno de la clase. Ejemplo de funciones públicas son los métodos
de una clase. También es posible crear variables públicas, para que
puedan ser manejadas desde la instancia, pero no es algo común o
recomendable, entre otras cosas porque deja un hueco de seguridad en la
clase, acabando con la idea de la “encapsulación”. Para declarar una
variable/función como pública, se le antepone la palabra clave “public”.
Construcción de clases
Ámbito y acceso a los miembros de una clase (public, private, protected)

Private

Al contrario que las públicas, las variables/funciones privadas sólo pueden


ser accedidas desde dentro de la misma clase. Todo intento de llamarlas
desde la una instancia de la misma es en vano. Mantener
variables/funciones privadas permiten tener un mayor control sobre la
clase, sobre el modo como procesa sus métodos, como maneja sus
variables, etc. Para declarar una variable/función como privada, se le
antepone la palabra clave “private”.
Construcción de clases
Ámbito y acceso a los miembros de una clase (public, private, protected)

Protected

xiste un tipo intermedio de ámbito, llamado “protegido”. Es un punto


medio entre público y privado, porque -como ocurre con las privadas- no
se puede acceder a ella desde una instancia de la clase, pero -como ocurre
con las públicas- puede ser accedido desde las subclases de ésta, no
importa si se encuentran o no en el mismo paquete. Básicamente significa
que, si una clase hereda de otra, tendrá acceso a las variables/funciones
protegidas de la super-clase, de lo contrario, no podrá acceder a ellas.
Para declarar una variable como protegida, se le antepone la palabra clave
“protected”.
Construcción de clases
Ámbito y acceso a los miembros de una clase (public, private, protected)
Construcción de clases
Apuntador this
El apuntador this es un puntero de auto-referencia a un objeto propio de su
misma clase. Si llamas a una función que devuelve un objeto de una cierta clase.
Si esa función tiene como parámetro de retorno el puntero *this significa que
devolverá el propio objeto con la cual fue llamada.
Por ejemplo si una función recibe como parámetro de entrada un objeto y
devuelve un entero y deseas devolver un entero que es un atributo del objeto
mismo, se declara

return this.X ó return this->X

donde X es el nombre de la variable de tipo int que se encuentra declarada en la


clase. Se usa el . (punto) si el objeto recibido por la funcion fue pasado por valor
y el -> (flechita) si el objeto fue pasado por referencia (osea su direccion en
memoria).
Construcción de clases
Apuntador this
Construcción de clases
Objeto

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.
Construcción de clases
Objeto

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;
Para utilizar la funcionalidad definida en una clase en particular (salvo en
las clases abstractas), primeramente es necesario crear un objeto de esa
clase.
Construcción de clases
Sobrecarga de funciones

Una forma con la que C++ consigue el polimorfismo es mediante la


utilización de la sobrecarga de funciones . En C++, dos o mas funciones
pueden compartir el mismo nombre siempre que la declaración de sus
parámetros sea diferente. En esta situación ,las funciones que comparten
el mismo nombre se dice que están sobrecargadas
Construcción de clases
Sobrecarga de funciones

Por ejemplo
Construcción de clases
Sobrecarga de operadores
La sobrecarga de operadores es uno de los mecanismos que nos permite
ampliar las capacidades de los lenguajes de programación orientados a
objetos. La declaración y definición de una sobrecarga de operador es
muy similar a la declaración y definición de una función cualquiera. El
ejemplo más sencillo de una sobrecarga de operadores nos lo da el
lenguaje mismo, es decir, en una operación aritmética el compilador
determina el tipo de operación requerida de acuerdo con el tipo de datos
involucrados.
Construcción de clases
Sobrecarga de operadores
El lenguaje C++ permite redefinir la funcionalidad de los siguientes operadores:

+-*/%^&
| ~ ! = < > +=
-
*
/= %= ^= &= |=
<< >> >>
<<
=!
<=>= && || ++ -- ->* ,
-> [] () new new[] delete delete[]
Los operadores +, -, * y & son sobre cargables en sus dos versiones, unaria y binaria. Es
decir: suma binaria +; más unitario +; multiplicación *; indirección *; referencia & y
manejo de bits &.
Construcción de clases
Sobrecarga de operadores
Limitaciones

La sobrecarga de un operador no puede cambiar el número de operandos o la


asociatividad y precedencia del mismo. En otras palabras: se puede modificar
su funcionalidad pero no su gramática original. Por ejemplo, un operador
unario no puede ser transformado en binario y viceversa.
•No pueden definirse nuevos tokens como operadores. En caso necesario
deben utilizarse funciones. Por ejemplo, no puede definirse ** como un token
para representar la exponenciación (a ** b); en todo caso utilizar algo
así: pow(a, b).
•No es posible redefinir el sentido de un operador aplicado a un puntero. Por
ejemplo, no es posible modificar el sentido del operador suma (+) entre un
puntero y un entero

Potrebbero piacerti anche