You are on page 1of 19

21 de

ALGORITMO Y ESTRUTURAS DE DATOS II septiembre


de 2016

INTRODUCCION

El siguiente trabajo que es presentado a Ud. lleva por título: “PROGRAMACIÓN ORIENTADA
A OBJETOS”. Este material realizado con esfuerzo y dedicación tiene como único propósito
que nosotros como alumnos de la Facultad de Ingeniería de Sistemas e Informática (FISI)
tenga conocimiento en forma detallada acerca de los tipos de algoritmos, tanto textuales
como gráficos.

Una vez recopilado el material bibliográfico, procesado y analizado se llegaron a


conclusiones que permitirán enriquecer los conocimientos; aquellos que serán útiles en la
vida cotidiana como profesionales en la materia.

Este trabajo proporciona la base teórica y práctica la cual es necesaria para comprender el
actual paradigma de programación orientada a objetos.

Finalmente el objetivo es conocer y dar a conocer a todos los alumnos interesados sobre
el tema una información actualizada y veraz detallando los mínimos detalles que el autor
plasma en sus investigaciones.

Este trabajo se realizo en un lapso de cuatro horas del día 21 de septiembre de 2010 en la
ciudad de Iquitos – Peru.
21 de
ALGORITMO Y ESTRUTURAS DE DATOS II septiembre
de 2016

PROGRAMACION ORIENTADA A OBJETOS

ORIGENES

La programación OO empezó hace 30 años En los 1990s se incrementó dramáticamente la


demanda para sistemas de software OO, por la promesa en la revolución en el desarrollo
de software.
Han aparerecido varias metodologías para el desarrollo de software, que tienen que ver con
algunas o todas las fases del ciclo de vida del software, desde los requerimientos al
mantenimiento.
Algunas características importantes de los sistemas de software actuales son:
Complejidad: la arquitectura interna de los sistemas actuales de software es compleja,
incluyen frecuentemente concurrencia y paralelismo. La abstracción en términos de
conceptos de OO es una técnica que ayuda a tratar con la complejidad.
Amigabilidad: Este es un requerimiento de suma importancia para los sistemas de software
en general.
Reusabilidad: Tomar componentes creados por otros es mejor que crearlos nuevos. La
herencia es un mecanismo de OO que estimula la reusabilidad del software. Facilita el
rápido desarrollo del software.
Las razones del rápido desarrollo en los últimos 15 años han sido:
Una mejor modelación de aplicaciones del mundo real
La posibilidad del reúso del software durante el desarrollo de un sistema de software

Los conceptos de la programación orientada a objetos tienen origen en Simula 67, un


lenguaje diseñado para hacer simulaciones, creado por Ole-Johan Dahl y Kristen Nygaard
del Centro de Cómputo Noruego en Oslo. En este centro, se trabajaba en simulaciones de
naves, que fueron confundidas por la explosión combinatoria de cómo las diversas
cualidades de diferentes naves podían afectar unas a las otras. La idea ocurrió para agrupar
los diversos tipos de naves en diversas clases de objetos, siendo responsable cada clase de
objetos de definir sus propios datos y comportamientos. Fueron refinados más tarde en
Smalltalk, que fue desarrollado en Simula en Xerox PARC (cuya primera versión fue escrita
sobre Basic) pero diseñado para ser un sistema completamente dinámico en el cual los
objetos se podrían crear y modificar "en marcha" (en tiempo de ejecución) en lugar de tener
un sistema basado en programas estáticos.

La programación orientada a objetos tomó posición como el estilo de programación


dominante a mediados de los años ochenta, en gran parte debido a la influencia de C++,
una extensión del lenguaje de programación C. Su dominación fue consolidada gracias al
auge de las Interfaces gráficas de usuario, para las cuales la programación orientada a
objetos está particularmente bien adaptada. En este caso, se habla también de
programación dirigida por eventos.
21 de
ALGORITMO Y ESTRUTURAS DE DATOS II septiembre
de 2016

Las características de orientación a objetos fueron agregadas a muchos lenguajes existentes


durante ese tiempo, incluyendo Ada, BASIC, Lisp, Pascal, entre otros. La adición de estas
características a los lenguajes que no fueron diseñados inicialmente para ellas condujo a
menudo a problemas de compatibilidad y en la capacidad de mantenimiento del código. Los
lenguajes orientados a objetos "puros", por su parte, carecían de las características de las
cuales muchos programadores habían venido a depender. Para saltar este obstáculo, se
hicieron muchas tentativas para crear nuevos lenguajes basados en métodos orientados a
objetos, pero permitiendo algunas características imperativas de maneras "seguras". El
Eiffel de Bertrand Meyer fue un temprano y moderadamente acertado lenguaje con esos
objetivos pero ahora ha sido esencialmente reemplazado por Java, en gran parte debido a
la aparición de Internet, y a la implementación de la máquina virtual de Java en la mayoría
de navegadores. PHP en su versión 5 se ha modificado, soporta una orientación completa a
objetos, cumpliendo todas las características propias de la orientación a objetos.

EL PARADIGMA DE ORIENTACIÓN A OBJETOS

La programación orientada a objetos aporta un nuevo enfoque a los retos que se plantean
en la programación estructurada cuando los problemas a resolver son complejos. Al
contrario que la programación procedimental que enfatiza en los algoritmos, la POO
enfatiza en los datos. En lugar de intentar ajustar un problema al enfoque procedimental
de un lenguaje, POO intenta ajustar el lenguaje al problema. La idea es diseñar formatos de
datos que se correspondan con las características esenciales de un problema. Los lenguajes
orientados combinan en una única unidad o módulo, tanto los datos como las funciones
que operan sobre esos datos. Tal unidad se llama objeto. Si se desea modificar los datos de
un objeto, hay que realizarlo mediante las funciones miembro del objeto. Ninguna otra
función puede acceder a los datos. Esto simplifica la escritura, depuración y mantenimiento
del programa.
En el paradigma orientado a objetos, el programa se organiza como un conjunto finito de
objetos que contienen datos y operaciones (funciones miembro en C++) que llaman a esos
datos y que se comunican entre sí mediante mensajes.

CONCEPTOS FUNDAMENTALES

La programación orientada a objetos es una forma de programar que trata de encontrar


una solución a estos problemas. Introduce nuevos conceptos, que superan y amplían
conceptos antiguos ya conocidos. Entre ellos destacan los siguientes:

 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 ellas.
 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
21 de
ALGORITMO Y ESTRUTURAS DE DATOS II septiembre
de 2016

si esos atributos y operaciones hubiesen sido definidos por la misma D. Por lo tanto,
puede usar los mismos métodos y variables publicas 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. Esto es así para mantener
hegemónico el ideal de OOP.
 Objeto: 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 corresponde con los objetos reales del mundo que nos
rodea, o a objetos internos del sistema (del programa). Es una instancia a una clase.
 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, a la reacción que puede desencadenar un objeto, es decir la acción que
genera.
 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.
21 de
ALGORITMO Y ESTRUTURAS DE DATOS II septiembre
de 2016

CARACTERÍSTICAS DE LA POO

Existe un acuerdo acerca de qué características contempla la "orientación a objetos", las


características siguientes son las más importantes:

 Abstracción: denota las características esenciales de un objeto, donde se capturan


sus comportamientos. 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. 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.

 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 específica 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.
 Polimorfismo: 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 en una referencia producirá
el comportamiento correcto para el tipo real del objeto referenciado. Cuando esto
21 de
ALGORITMO Y ESTRUTURAS DE DATOS II septiembre
de 2016

ocurre en "tiempo de ejecución", esta última característica se llama asignación


tardía o asignación dinámica. Algunos lenguajes proporcionan medios más estáticos
(en "tiempo de compilación") de polimorfismo, tales como las plantillas y la
sobrecarga de operadores de C++.
 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.
 Recolección de basura: la recolección de basura o garbage collector 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. Esto significa que el programador no debe preocuparse por la
asignación o liberación de memoria, ya que el entorno la asignará al crear un nuevo
objeto y la liberará cuando nadie lo esté usando. En la mayoría de los lenguajes
híbridos que se extendieron para soportar el Paradigma de Programación Orientada
a Objetos como C++ u Object Pascal, esta característica no existe y la memoria debe
desasignarse manualmente.

LENGUAJES ORIENTADOS A OBJETOS

Simula (1967) es aceptado como el primer lenguaje que posee las características principales
de un lenguaje orientado a objetos. Fue creado para hacer programas de simulación, en
donde los "objetos" son la representación de la información más importante. Smalltalk
(1972 a 1980) es posiblemente el ejemplo canónico, y con el que gran parte de la teoría de
la programación orientada a objetos se ha desarrollado.

Entre los lenguajes orientados a objetos se destacan los siguientes:

 ABAP
 ABL Lenguaje de programación de OpenEdge de Progress Software
 ActionScript
 ActionScript 3
 Ada
 C++
 C#
 Clarion
 Clipper (lenguaje de programación) (Versión 5.x con librería de objetos Class(y))
 D
21 de
ALGORITMO Y ESTRUTURAS DE DATOS II septiembre
de 2016

 Object Pascal (Delphi)


 Gambas
 Harbour
 Eiffel
 Java
 JavaScript (la herencia se realiza por medio de la programación basada en
prototipos)
 Lexico (en castellano)
 Objective-C
 Ocaml
 Oz
 R
 Perl (soporta herencia múltiple. La resolución se realiza en preorden, pero puede
modificarse al algoritmo linearization C3 por medio del módulo Class::C3 en CPAN)
 PHP (a partir de su versión 5)
 PowerBuilder
 Python
 Ruby
 Smalltalk (Proyecto investigativo. Influenció a Java.)
 Magik (SmallWorld)
 Vala
 VB.NET
 Visual FoxPro (en su versión 6)
 Visual Basic 6.0
 Visual Objects
 XBase++
 Lenguaje DRP
 Lenguaje de programación Scala (lenguaje usado por Twitter) Muchos de estos
lenguajes de programación no son puramente orientados a objetos, sino que son
híbridos que combinan la POO con otros paradigmas.

Al igual que C++ otros lenguajes, como OOCOBOL, OOLISP, OOPROLOG y Object REXX, han
sido creados añadiendo extensiones orientadas a objetos a un lenguaje de programación
clásico.

Un nuevo paso en la abstracción de paradigmas de programación es la Programación


Orientada a Aspectos (POA). Aunque es todavía una metodología en estado de maduración,
cada vez atrae a más investigadores e incluso proyectos comerciales en todo el mundo.
21 de
ALGORITMO Y ESTRUTURAS DE DATOS II septiembre
de 2016

COMPARACIÓN ENTRE LENGUAJES POO


Lenguaje ensamblador
Instrucciones de maquina (operadores) que manipulan en contenido de localidades de
memoria (operandos)

Lenguaje de alto nivel


Operadores se vuelven declaraciones y los operandos en variables y estructuras de datos.
Los programas están compuestos de de una colección de variables que representan algún
dato y un conjunto de procedimientos que manipulan esas variables.
21 de
ALGORITMO Y ESTRUTURAS DE DATOS II septiembre
de 2016
21 de
ALGORITMO Y ESTRUTURAS DE DATOS II septiembre
de 2016

PROGRAMACIÓN ORIENTADA
A OBJETOS VERSUS PROGRAMACIÓN
ESTRUCTURADA: C++ Y ALGORITMOS

El aprendizaje de la programación requiere el conocimiento de técnicas y metodologías de


programación estructurada. Aunque a finales del siglo XX y, sobre todo en este siglo XXI, la
programación orientada a objetos se ha convertido en la tecnología de software más
utilizada; el conocimiento profundo de algoritmos y estructuras de datos, en muchos casos
con el enfoque estructurado, facultará al lector y futuro programador los fundamentos
técnicos necesarios para convertirse en un brillante programador de C++, en general, y
programador orientado a objetos, en particular.

CONCEPTO DE ALGORITMO

Un algoritmo es una secuencia finita de instrucciones, reglas o pasos que describen de


modo preciso las operaciones que una computadora debe realizar para ejecutar una tarea
determinada en un tiempo finito. En la práctica, un algoritmo es un método para resolver
problemas mediante los pasos o etapas siguientes:
1. Diseño del algoritmo que describe la secuencia ordenada de pasos —sin ambigüedades—
conducentes a la solución de un problema dado (Análisis del problema y desarrollo del
algoritmo).
2. Expresar el algoritmo como un programa en un lenguaje de programación adecuado.
(Fase de codificación).
3. Ejecución y validación del programa por la computadora.
Para llegar a la realización de un programa es necesario el diseño previo de un algoritmo
indicando cómo hace el algoritmo la tarea solicitada, y eso se traduce en la construcción de
un algoritmo. El resultado final del diseño es una solución que debe ser fácil de traducir a
estructuras de datos y estructuras de control de un lenguaje de programación específico.
Las dos herramientas más comúnmente utilizadas para diseñar algoritmos son: diagramas
de flujo y pseudocódigos.
• Diagrama de flujo (flowchart). Representación gráfica de un algoritmo.
• Pseudocódigo. Lenguaje de especificación de algoritmos, mediante palabras similares al
inglés o español.
El algoritmo es la especificación concisa del método para resolver un problema con
indicación de las acciones a realizar.
Un algoritmo es un conjunto finito de reglas que dan una secuencia de operaciones para
resolver un determinado problema.
Es, por tanto, un método para resolver un problema que tiene en general una entrada y una
salida. Las características fundamentales
que debe cumplir todo algoritmo son:
• Un algoritmo debe ser preciso e indicar el orden de realización de cada paso.
21 de
ALGORITMO Y ESTRUTURAS DE DATOS II septiembre
de 2016

• Un algoritmo debe estar bien definido. Si se sigue un algoritmo dos veces, se debe obtener
el mismo resultado cada vez.
• Un algoritmo debe ser finito. Si se sigue un algoritmo, se debe terminar en algún
momento; o sea, debe tener un número finito de pasos.
La definición de un algoritmo debe describir tres partes: Entrada, Proceso y Salida.

PROGRAMACIÓN ESTRUCTURADA

La programación estructurada consiste en escribir un programa de acuerdo con unas reglas


y un conjunto de técnicas. Las reglas son: el programa tiene un diseño modular, los módulos
son diseñados descendentemente, cada módulo de programa se codifica usando tres
estructuras de control (secuencia, selección e iteración); es el conjunto de técnicas que han
de incorporar: recursos abstractos; diseño descendente y estructuras básicas de control.
Descomponer un programa en términos de recursos abstractos consiste en descomponer
acciones complejas en términos de acciones más simples capaces de ser ejecutadas en una
computadora.
El diseño descendente se encarga de resolver un problema realizando una descomposición
en otros más sencillos mediante módulos jerárquicos. El resultado de esta jerarquía de
módulos es que cada módulo se refina por los de nivel más bajo que resuelven problemas
más pequeños y contienen más detalles sobre los mismos.
Las estructuras básicas de control sirven para especificar el orden en que se ejecutarán las
distintas instrucciones de un algoritmo. Este orden de ejecución determina el flujo de
control del programa.

La programación estructurada significa:

• El programa completo tiene un diseño modular.


• Los módulos se diseñan con metodología descendente (puede hacerse también
ascendente).
• Cada módulo se codifica utilizando las tres estructuras de control básicas: secuenciales,
selectivas y repetitivas (ausencia total de sentencias ir a (go to)).
• Estructuración y modularidad son conceptos complementarios (se solapan).

Un programa en un lenguaje procedimental es un conjunto de instrucciones o sentencias.


Lenguajes de programación como C, Pascal, FORTRAN, y otros similares, se conocen como
lenguajes procedimentales (por procedimientos). Es decir, cada sentencia o instrucción
indica al compilador que realice alguna tarea: obtener una entrada, producir una salida,
sumar tres números, dividir por cinco, etc. En el caso de pequeños programas, estos
principios de organización (denominados paradigma) se demuestran eficientes. El
programador sólo ha de crear esta lista de instrucciones en un lenguaje de programación,
compilar en la computadora y ésta, a su vez, ejecuta las instrucciones.
Cuando los programas se vuelven más grandes, la lista de instrucciones aumenta
considerablemente, de modo tal que el programador tiene muchas dificultades para
21 de
ALGORITMO Y ESTRUTURAS DE DATOS II septiembre
de 2016

controlar ese gran número de instrucciones. Para resolver este problema los programas se
descomponen en unidades más pequeñas que adoptan el nombre de funciones
(procedimientos, subprogramas o subrutinas en otros lenguajes de programación). De este
modo un programa orientado a procedimientos se divide en funciones,
cada una de las cuales tiene un propósito bien definido y resuelve una tarea concreta, y se
diseña una interfaz claramente definida (el prototipo o cabecera de la función) para su
comunicación con otras funciones.
Con el paso de los años, la idea de romper un programa en funciones fue evolucionando y
se llegó al agrupamiento de las funciones en otras unidades más grandes llamadas módulos
(normalmente, en el caso de C++, denominadas archivos o ficheros); sin embargo, el
principio seguía siendo el mismo: agrupar componentes que ejecutan listas de instrucciones
(sentencias).
Existen varias razones de la debilidad de los programas estructurados para resolver
problemas complejos. Tal vez las dos razones más evidentes son éstas. Primera, las
funciones tienen acceso ilimitado a los datos globales; segundos, las funciones inconexas y
datos, fundamentos del paradigma procedimental proporcionan un modelo pobre del
mundo real. La programación orientada a objetos se desarrolló para tratar de paliar
diversas limitaciones que se encontraban en anteriores enfoques de programación.

EL PARADIGMA DE ORIENTACIÓN A OBJETOS

La programación orientada a objetos aporta un nuevo enfoque a los retos que se plantean
en la programación estructurada cuando los problemas a resolver son complejos. Al
contrario que la programación procedimental que enfatiza en los algoritmos, la POO
enfatiza en los datos. En lugar de intentar ajustar un problema al enfoque procedimental
de un lenguaje, POO intenta ajustar el lenguaje al problema. La idea es diseñar formatos de
datos que se correspondan con las características esenciales de un problema. Los lenguajes
orientados combinan en una única unidad o módulo, tanto los datos como las funciones
que operan sobre esos datos. Tal unidad se llama objeto. Si se desea modificar los datos de
un objeto, hay que realizarlo
mediante las funciones miembros
del objeto. Ninguna otra función
puede acceder a los datos. Esto
simplifica la escritura, depuración
y mantenimiento del programa.

En el paradigma orientado a
objetos, el programa se organiza
como un conjunto finito de objetos
que contienen datos y operaciones
(funciones miembro en C++) que
21 de
ALGORITMO Y ESTRUTURAS DE DATOS II septiembre
de 2016

llaman a esos datos y que se comunican entre sí mediante mensajes.

Cuando se trata de resolver un problema con orientación a objetos, dicho problema no se


descompone en funciones como en programación estructurada tradicional, caso de C, sino
en objetos. El pensar en términos de objetos tiene una gran ventaja: se asocian los objetos
del problema a los objetos del mundo real.

C++ COMO LENGUAJE DE PROGRAMACIÓN ORIENTADA A OBJETOS

C++ es una extensión (ampliación) de C con características más potentes. Estrictamente


hablando es un súper conjuntos de C.
Los elementos más importantes añadidos a C por C++ son: clases, objetos y programación
orientada a objetos (C++ fue llamado originalmente “C con clases”).
En C++, un objeto es un elemento individual con su propia identidad; por ejemplo, un libro,
un automóvil... Una clase puede describir las propiedades genéricas de un ejecutivo de una
empresa (nombre, título, salario, cargo...) mientras que un objeto representará a un
ejecutivo específico (Luis Mackoy, Lucas Soblechero).
En general, una clase define qué datos se utilizan para representar un objeto y las
operaciones que se pueden ejecutar sobre esos datos. En el sentido estricto de
programación, una clase es un tipo de datos. Diferentes variables se pueden crear de este
tipo. En programación orientada a objetos, estas variables se llaman instancias. Las
instancias son, por consiguiente, la realización de los objetos descritos en una clase. Estas
instancias constan de datos o atributos descritos en la clase y se pueden manipular con las
operaciones definidas dentro de ellas.
Una clase es una descripción general de un conjunto de objetos similares. Por definición
todos los objetos de una clase comparten los mismos atributos (datos) y las mismas
operaciones (métodos). Una clase encapsula las abstracciones de datos y operaciones
necesarias para describir una entidad u objeto del mundo real.
El diseño de clases fiables y útiles puede ser una tarea difícil. Afortunadamente los lenguajes
de programación orientada a objetos facilitan la tarea ya que incorporan clases existentes
en su propia programación. Uno de los beneficios reales de C++ es que permite la
reutilización y adaptación de códigos existentes y ya bien probados y depurados.
En el diseño de programas orientados a objetos se realiza en primer lugar el diseño de las
clases que representan con precisión aquellas cosas que trata el programa; por ejemplo, un
programa de dibujo, puede definir clases que representan rectángulos, líneas, pinceles,
colores, etc. Las definiciones de clases, incluyen una descripción de operaciones permisibles
para cada clase, tales como desplazamiento de un círculo o rotación de una línea. A
continuación se prosigue el diseño de un programa utilizando objetos de las clases.
21 de
ALGORITMO Y ESTRUTURAS DE DATOS II septiembre
de 2016

Los términos objeto e instancia se utilizan frecuentemente como sinónimos (especialmente


en C++). Si una variable de tipo Carro se declara, se crea un objeto Carro (una instancia de
la clase Carro). Las operaciones definidas en los objetos se llaman métodos. Cada operación
llamada por un objeto se interpreta como un mensaje al objeto, que utiliza un método
específico para procesar la operación
Desde el punto de vista de implementación un objeto es una entidad que posee un conjunto
de datos y un conjunto de operaciones (funciones o métodos). El estado de un objeto viene
determinado por los valores que toman sus datos, cuyos valores pueden tener las
restricciones impuestas en la definición del problema. Los datos se denominan también
atributos y componen la estructura del objeto y las operaciones —también llamadas
métodos— representan los servicios que proporciona el objeto.
Nuestro objetivo es ayudarle a escribir programas orientado a objetos tan pronto como sea
posible. Sin embargo, como ya se ha observado, muchas características de C++ se han
heredado de C, de modo que, aunque la estructura global de un programa pueda ser
orientado objetos, consideramos que usted necesita conocimientos profundos del “viejo
estilo procedimental”. Por ello, los capítulos de la primera parte del libro le van
introduciendo lenta y pausadamente en las potentes propiedades orientadas a objetos de
las últimas partes, al objeto de conseguir a la terminación del libro el dominio de la
programación en C++.

¿CUALES SON LAS VENTAJAS Y DESVENTAJAS ENTRE LA POO


Y LA PROGRAMACION ESTRUCTURADA?
Es una pregunta muy abierta. Pero en resumen y sin tecnicismos
Ventajas:
- Datos separados del Diseño.
- Reutilización del código.
-Entendimiento del programa en el mundo real.
- Fácil entendimiento de la lógica del programa.
- Código simple (aunque cueste acostumbrarse).
- Fácil documentación y diseño del programa.
- Dinamismo en el manejo de los datos.
- Facilidad en el mantenimiento y expansión.
Desventajas:
- Complejidad para adaptarse.
- Mayor cantidad de código (aunque a la larga no, por la reutilización).

 LAS VENTAJAS DE LA POO SOBRE LA ESTRUCTURADA SON:

* Fomenta la reutilización y extensión del código.


* Permite crear sistemas más complejos.
21 de
ALGORITMO Y ESTRUTURAS DE DATOS II septiembre
de 2016

* Relacionar el sistema al mundo real.


* Facilita la creación de programas visuales.
* Construcción de prototipos
* Agiliza el desarrollo de software
* Facilita el trabajo en equipo
* Facilita el mantenimiento del software

¿QUE TIENEN LA PROGRAMACIÓN ESTRUCTURADA QUE NO TENGA LA


POO?

La programación orientada a objeto es un nivel más alto.


La diferencia entre cada paradigma está en el enfoque.
La programación estructurada, como lo indica su nombre… pretende "separar" el
pensamiento y funcionamiento por módulos... con combinaciones de sentencias simples y
complejas.
En una escala más alta de abstracción, se encuentra el enfoque OO. Donde cada elemento
de la "realidad" es un ente, un objeto... un conjunto de objetos que comparten
características comunes forman una clase. La clase físicamente no existe... es un elemento
abstracto. Para que comprendas: Podemos distinguir muchos distintos tipos de autos...
pero en fin... todo son autos. "Internamente" nuestro razonamiento nos dice: "que todo
objeto que posea cuatro ruedas, 2, 4 o 5 puertas, techo y un motor pertenece a la categoría
o clase auto". En la jerga informática se dice que la clase es la que estructura base de donde
cada INSTANCIA de la clase es un objeto. Y así podemos armar un conjunto de clases y
subclases: Garfield es un gato, pero un gato es un animal (Gato es una subclase de animal,
y Garfield es una INSTANCIA de Gato). Esto es lo que se conoce como Herencia. A la par
vienen el concepto de polimorfismo y el de especificación.
El enfoque OO está dirigido también por un principio fundamental: el encapsulamiento.
La idea central del encapsulamiento es "Yo te digo superficialmente lo que se hacer y tu me
dices lo que deseas saber de mi" Y esta es la manera en que cada objeto se comunica con
otro: uno le dice a otro que lo que desea obtener y éste se lo hace sin darle demasiado
detalles. Por ponerte un ejemplo: Tú necesitas dinero, vas al banco y pides un préstamo. Le
dices a la cajera (o el personal adecuado) y le haces saber lo que deseas. A ti no te interesa
saber en profundidad como es el procedimiento interno del banco para realizar el
préstamo. Simplemente te dicen lo que debe serte comunicado y listo. Es decir que el
encapsulamiento sirve para ocultar información a lo demás que simplemente no debe
saber. Se da a conocer solo lo necesario para que otro pueda trabajar.

En pocas, POO es un "nuevo" enfoque: Se ve la realidad como un gran conjunto de objetos


que se relacionan y hacen su tarea apoyándose unos a otros. Para que juntos consigan un
objetivo mayor del que podrían conseguir en forma aisladas.
Esto no quiere decir que se haya abandonado la estructuración, sigue existiendo... pero con
otro grado de abstracción. Cada clase debe responder a los principios de Cohesión y
Acoplamiento. Una clase internamente debe estar estructurada de modo que exista un
21 de
ALGORITMO Y ESTRUTURAS DE DATOS II septiembre
de 2016

grado de "afinidad" entre sus contenidos: funciones, eventos, etc... Una clase que no sabe
lo que hace es una clase que no sirve.
Por otro lado, una clase que no sabe delegar información (dar a conocer su funcionamiento
superficialmente) conduce a una mala modularidad.

Espero que se me entienda... Todo se reduce a cuestión de enfoque y de cómo representar


el modelo del problema y su solución.

DIFERENCIA ENTRE LOS LENGUAJES DE


PROGRAMACIÓN ESTRUCTURADOS, ORIENTADOS A
OBJETOS, NATURALES Y LÓGICOS.

Programación Estructurada

La programación estructurada es una forma de escribir programas de ordenador


(programación de computadora) de forma clara. Para ello utiliza únicamente tres
estructuras: secuencia, selección e iteración; siendo innecesario y no permitiéndose el uso
de la instrucción o instrucciones de transferencia incondicional (GOTO, EXIT FUNCTION,
EXIT SUB o múltiples RETURN).
Hoy en día las aplicaciones informáticas son mucho más ambiciosas que las necesidades de
programación existentes en los años 1960, principalmente debido a las aplicaciones
gráficas, por lo que las técnicas de programación estructurada no son suficientes. Ello ha
llevado al desarrollo de nuevas técnicas, tales como la programación orientada a objetos y
el desarrollo de entornos de programación que facilitan la programación de grandes
aplicaciones.
Orígenes de la programación estructurada
A finales de los años 1960 surgió una nueva forma de programar que no solamente daba lugar
a programas fiables y eficientes, sino que además estaban escritos de manera que facilitaba
su comprensión posterior.
El teorema del programa estructurado, demostrado por Böhm- Jacopini, demuestra que
todo programa puede escribirse utilizando únicamente las tres instrucciones de control
siguientes:
 Secuencia
 Instrucción condicional.
 Iteración (bucle de instrucciones) con condición al principio.
Solamente con estas tres estructuras se pueden escribir todos los programas (programas) y
aplicaciones posibles. Si bien los lenguajes de programación tienen un mayor repertorio de
estructuras de control, éstas pueden ser construidas mediante las tres básicas.

Ventajas de la programación estructurada


21 de
ALGORITMO Y ESTRUTURAS DE DATOS II septiembre
de 2016

Con la programación estructurada, elaborar programas de computador sigue siendo una


labor que exige esfuerzo, creatividad, habilidad y cuidado. Sin embargo, con este estilo
podemos obtener las siguientes ventajas:
1. Los programas son más fáciles de entender, ya que pueden ser leídos de forma
secuencial, sin necesidad de hacer seguimiento a saltos de línea (GOTO) dentro de los
bloques de código para entender la lógica.
2. La estructura del programa es clara, puesto que las instrucciones
están más ligadas o relacionadas entre sí.
3. Reducción del esfuerzo en las pruebas. El seguimiento de los fallos o errores del programa
("debugging") se facilita debido a la estructura más visible, por lo que los errores se pueden
detectar y corregir más fácilmente.
4. Reducción de los costes de mantenimiento de los programas.
5. Programas más sencillos y más rápidos (ya que es más fácil su optimización).
6. Los bloques de código son auto explicativos, lo que facilita la documentación.
7. Los GOTO se reservan para construir las instrucciones básicas. Aunque no se usan de
forma directa, por estar prohibida su utilización, están incluidas implícitamente en las
instrucciones de selección e iteración.
8. Un programa escrito de acuerdo a estos principios no solamente tendrá una mejor
estructura sino también una excelente presentación.
9. La programación estructurada ofrece estos beneficios, pero no se la debe considerar
como una panacea ya que el desarrollo de programas es, principalmente, una tarea de
dedicación, esfuerzo y creatividad.

Inconvenientes de la programación estructurada

El principal inconveniente de este método de programación es que se obtiene un único


bloque de programa, que cuando se hace demasiado grande puede resultar problemático
su manejo; esto se resuelve empleando la programación modular, definiendo módulos
interdependientes programados y compilados por separado (en realidad esto no es
necesario, pero así ha sido históricamente). Un método un poco más sofisticado es la
programación por capas, en la que los módulos tienen una estructura jerárquica en la que
se pueden definir funciones dentro de funciones o de procedimientos.
En Conclusión:
Tanto en la programación, como en todas las ramas que intervienen en la gestión y
aplicación de la tecnología, se está presentando una tendencia: esta es que las
aplicaciones y dispositivos, sean cada vez más inteligentes y eficientes, esto es (desde
mi punto de vista) que sean capaces de adaptarse a situaciones, para las que quizá no
fueron programados, pero que en base al análisis de circunstancias, puedan trazar una
nueva línea de acción, para seguirla y llegar a la solución de un problema.
21 de
ALGORITMO Y ESTRUTURAS DE DATOS II septiembre
de 2016
21 de
ALGORITMO Y ESTRUTURAS DE DATOS II septiembre
de 2016

BIBLIOGRAFIA

 WWW.GOOGLE.COM
 WWW.MONOGRAFIAS.COM
 WWW.WIKIPEDIA.COM
 WWW.ELRINCONDELVAGO.COM

You might also like