Programacion orientada a objetos

UAA – Sistemas Electronicos Programacion 2 / C++ Eduardo Serna-Perez 3 Programacion Orientada a Objetos Es una metodologia de diseno de software y un paradigma de programacion en el que define a los programas en terminos de “clases de objetos”, objetos que son entidades que combinan su estado (es decir, datos) y su comportamiento (esto es, procedimientos o funciones). La programacion orientada a objetos expresa un programa como un conjunto de estos objetos, y que a su vez se comunican entre ellos para realizar tareas.

Esto difiere de los lenguajes procedurales tradicionales, en los que los datos y los procedimientos estan separados y sin relacion. Los programas disenados con orientacion a objetos estan pensados para ser codigos mas simples de mantener y reutilizar. La programacion orientada a objetos anima al programador a pensar los programas principalmente en terminos de tipos de datos, y en segundo lugar en las operaciones (metodos) especificas que interactuan con esos datos.

Mientras que los lenguajes procedurales animan al programador a pensar sobre todo en terminos de procedimientos, y en segundo lugar en los datos que esos procedimientos manejan. El primer lenguaje de programacion orientado a objetos fue Simula I, creado en la decada de 1960? s por Kristen

Lo sentimos, pero las muestras de ensayos completos están disponibles solo para usuarios registrados

Elija un plan de membresía
Nygaard (Figura 1) y Ole-Johan Dahl (Figura 2), del Centro de Computacion Noruego, originalmente fue desarrollado para apoyar la modelacion de simulaciones de eventos discretos en procesos cientificos e industriales, mediante la representacion directa de objetos del mundo real.

Figura 1: Kristen Nygaard Figura 2: Ole-Johan Dahl Se sabe que Nygaard y Dahl estaban trabajando en un problema de simulacion de envios, y que debido a la explosion combinatoria del problema, llegaron a confundirse ya que los diferentes atributos de los diferentes envios podrian afectar entre ellos. Entonces se les ocurrio la idea de agrupar los diferentes tipos de envios en diferentes clases de objetos, asi cada clase de objeto era responsable de defender sus propios datos y comportamientos.

Con Simula I (1961 al 65) y Simula 67, Nygaard y Dahl introdujeron los conceptos bajo los cuales mas tarde todos los lenguajes de programacion orientada a objetos serian construidos: objetos, clases, herencia, cuantificador virtual y ejecucion de programas multi-hilo. El termino “Orientado a Objetos” fue acunado por Alan Kay (Figura 3) en la decada de 1970? s, asi mismo, el es considerado tambien como uno de los creadores del modelo orientado a objetos y del diseno de interfaces graficas de usuario (GUI en ingles).

Alan Kay desarrollo mejoras sustanciales al modelo de programacion, generando un lenguaje llamado Smalltalk que era un sistema completamente dinamico en el cual las clases pueden ser creadas y modificadas dinamicamente. 1 UAA – Sistemas Electronicos Programacion 2 / C++ Eduardo Serna-Perez En la primera mitad de la decada de 1980’s la “Orientacion a Objetos” se convirtio en una metodologia de programacion dominante debido principalmente a la influencia de Smalltalk.

Su dominancia fue completamente cimentada por el surgimiento de los widget toolkit (herramientas GUI) desarrolladas principalmente en Smalltalk, para lo cual la orientacion a objetos es decididamente la mejor opcion. A partir de este punto, se desarrollaron mas lenguajes de programacion de este tipo entre los que destacan Ada, C++, Oberon de Niklaus Wirth (Figura 4), Objective-C de Brad Cox, Eiffel, Perl, Python, PHP, Java y ultimamente C#, VB. NET y Boo. Figura 3: Alan Kay Figura 4: Niklaus Wirth

A continuacion explicaremos los puntos mas importantes relacionados con este paradigma de programacion, asi como las bases en las que se sustenta su funcionamiento y metodologia. 3. 1 Conceptos de Programacion Orientada a Objetos (POO) El paradigma orientado a objetos se enfoca a las caracteristicas de comportamiento y estructura de las entidades como unidades completas, lo que nos permite disenar software de manera modular y con un alto manejo de estructuras de datos complejas.

El paradigma de programacion orientado a objetos se apoya en los siguientes conceptos: • Abstraccion (de datos) involucra la formulacion de un concepto (clase) poniendo atencion en las similitudes y diferencias entre las entidades de un conjunto, para extraer las caracteristicas esenciales que lo distingan y evitar las caracteristicas no relevantes. Y asi, se establece una sola representacion del concepto que tenga esas caracteristicas pertinentes.

Es la capacidad de crear tipos de datos definidos por el usuario extrayendo las propiedades esenciales de un concepto, sin preocuparse de los detalles exactos de la implementacion. Algunos simplemente lo definen como la capacidad de enfocarse en lo esencial. • Encapsulacion asegura que los usuarios de un objeto no alteren de manera inesperada el contenido de un objeto; solo sus metodos internos estan autorizados para acceder a ellos y su interfaz publica especifica como otros objetos podrian interactuar con el.

La abstraccion y la encapsulacion estan representadas por la clase. La clase es una abstraccion, porque define los atributos y metodos de un determinado conjunto de objetos con caracteristicas comunes, y es una encapsulacion por que constituye una caja negra que encierra tanto los datos que almacena como los metodos que permiten manipularlos. • Polimorfismo es la propiedad que permite a una operacion tener diferente comportamiento en diferentes objetos.

Es decir, diferentes objetos reaccionan de manera diferente al mismo mensaje (de modo que un mismo metodo pueda tener multiples implementaciones). 2 UAA – Sistemas Electronicos Programacion 2 / C++ Eduardo Serna-Perez • Herencia es la capacidad de definir una nueva clase a partir de otra. De esta forma, la reutilizacion de codigo esta garantizada. Las clases estan clasificadas en una jerarquia estricta, donde la clase padre es conocida como superclase y la clase hijo como clase derivada.

Esto significa que la clase derivada dispone de todos los atributos y metodos de su superclase. Los anteriores conceptos son los pilares fundamentales de la programacion orientada a objetos y describen de manera precisa su funcionamiento. La construccion de programas orientados a objetos permiten facilitar la comunicacion, incrementar la productividad y la consistencia en los modelos computacionales, asi como facilitar la modificacion de los programas y reducir la complejidad y el esfuerzo de resolucion de problemas. 3. 2 Definicion de clase, atributo, metodo y objeto

Recuerde que las clases son abstracciones de entidades presentes en un dominio determinado de problemas, y que las clases estan compuestas de diversos componentes que involucran el comportamiento del modelo a plasmar, asi pues definiremos brevemente esos componentes. Una clase es un tipo de dato definido por el usuario (dato abstracto), es muy similar a una estructura, ya que especifica los datos que se veran involucrados en la construccion del programa, pero ademas debera contemplar la implementacion de las funciones que deberan interactuar con dichos datos.

Con frecuencia se dice que la clase es equivalente a la generalizacion de un objeto. Se dice que los datos o atributos contenidos en la clase son el conjunto de caracteristicas que definen las propiedades de un objeto especifico, generalmente se conocen como variables del objeto. Y por otro lado, las funciones o metodos son pequenos programas altamente independientes asociados a los datos especificos de la clase. De manera que estos son los componentes necesarios para construir un objeto cualquiera.

Asi pues, los objetos son cajas negras que mantienen ocultas propiedades estructurales llamadas atributos, y propiedades de comportamiento llamadas metodos. De esta forma, los objetos son entonces instancias o ejemplares de una clase. Como una forma de estandarizar la nomenclatura de clases, se especifican dos reglas muy sencillas. Los nombres de las clases deberan iniciar con mayuscula y escribirse en singular, y los nombres de los atributos y los metodos deberan escribirse preferentemente con minusculas.

En el Lenguaje de Modelacion Unificado (UML), una clase se representa por un rectangulo con tres compartimentos: en el primero se especifica el nombre de la clase; en el segundo los atributos del objeto, que son manejados por la clase misma, y en el tercero las operaciones que pueden ser aplicadas o realizadas por el objeto, como se muestra en la Figura 5. Clase – atributo1 : + atributo2 : … – atributoN : + metodo1 (argumentos) : – metodo2 (argumentos) : … + metodoN (argumentos) : Figura 5: Esquema de una clase en UML 3 UAA – Sistemas Electronicos Programacion 2 / C++ Eduardo Serna-Perez

Empleando un diagrama de clases es posible conceptualizar mejor la idea de abstraccion y encapsulado, que en esencia es el proceso de ocultar ciertos elementos de la implementacion de una clase, pero permitiendo una interfaz publica (metodos) para que el usuario la pueda acceder sin problemas. El ocultamiento de la informacion es fundamental pues los elementos contenidos en una entidad abstracta deben ser, preferentemente inaccesibles al usuario. 3. 3 Ventajas de los lenguajes orientado a objetos Divide y venceras, es uno de los aspectos basicos en la solucion de problemas.

La division de tareas en pequenas sub-tareas para el desarrollo de software es fundamental, ya que le agrega una alta cohesion e independencia a los sistemas. En programacion estructurada se disenan las soluciones a problemas pensando principalmente en las tareas a realizar y se deja en segundo plano a los datos involucrados, en relacion a esta debilidad la orientacion a objetos busca integrar en un solo concepto (clase) los datos y las tareas involucradas con esos datos, creando modulos de programacion mas independientes y solidos. • • • Una herramienta de programacion realizada con el modelo orientado a objetos es mas cercano a la realidad, ademas de ser muy facil de mantener y reutilizar. El modelo orientado a objetos evita la redundancia en los procesos de manera que los codigos son mas entendibles y resumidos. La integridad que dan los objetos a los datos evita ambiguedades en su uso, dando mayor seguridad en los resultados. El modelo orientado a objetos facilita la integridad de modulos que hallan sido realizados por separado sin correr riesgos en el manejo de los datos.

En programacion orientada a objetos nos importa construir herramientas de programacion que sean altamente independientes entre ellas, pero lo suficientemente versatiles como para ser acopladas. De manera que se construyan sistemas de software mas simples de integrar y mantener. Al final lo que se busca es construir software lo mas escalable posible y que el usuario final del objeto no se preocupe por aspectos del diseno de la clase que emplea, unicamente se preocupa de usarlo de cierta forma, por ejemplo nosotros utilizamos los autos, pero nunca nos preocupamos por como funciona, solo lo usamos. . 4 Abstraccion de Datos La Abstraccion de datos involucra la formulacion de un concepto (clase) poniendo atencion en las similitudes y diferencias entre las entidades de un conjunto, para extraer las caracteristicas esenciales que lo distingan y evitar las caracteristicas no relevantes. Y asi, se establece una sola representacion del concepto que tenga esas caracteristicas pertinentes. Algunos simplemente lo definen como la capacidad de enfocarse en lo esencial. 3. 4. 1 Tipos de datos definidos por el usuario en C (datos abstractos)

Es muy comun emplear las estructuras de datos como tipos de datos definidos por el usuario, ademas de que resultan muy utiles ya que a partir de ellas podemos definir un nuevo tipo de dato que podra estar compuesto de elementos de otros tipos y en algunos casos quizas de mas estructuras. Por otro lado, las funciones juegan un papel trascendental en la definicion de datos, ya que es posible construir funciones que manejen esos tipos de datos definidos por el usuario, lo que puede aumentar y simplificar el diseno de programas ya que las funciones pueden estar asociadas a un tipo de dato en especial. 4

UAA – Sistemas Electronicos Programacion 2 / C++ Eduardo Serna-Perez En el siguiente ejemplo se muestra como podemos construir un programa a partir de estructuras, y despues desarrollar las funciones necesaria para poder interactuar con dichas estructuras. Construimos una estructura llamada Horario que define 3 valores hora, minuto, segundo. El programa principal genera una variable de tipo estructura Horario a la cual se le asignan valores iniciales y que posteriormente es enviada por referencia (&) a las funciones Militar() y Standar(), que se encargan de mostrar la hora en formato universal y estandar. include using namespace std; /* tipo Horario definido por el usuario mediante una estructura simple */ struct Horario { int hora, minuto, segundo; }; /* declaracion de prototipos */ void Militar ( Horario & ); // reciben una referencia por “alias” void Standar ( Horario & ); int main() { Horario Mexico; // variable tipo Horario Mexico. hora = 14; // asignan valores a los miembros Mexico. minuto = 57; Mexico. segundo = 0; cout