Sie sind auf Seite 1von 12

MIGUEL ANGEL AGUILAR ESTANISLAO

ES1511109383

UNIVERSIDAD ABIERTA Y A DISTANCIA DE


MEXICO

DESARROLLO DE SOFTWARE

PROGRAMACIN ORIENTADA A OBJETOS

2DO SEMESTRE

UNIDAD 1

ACTIVIDAD 1

DIFERENCIAS ENTRE PROGRAMACIN


ESTRUCTURADA Y POO
INTRODUCCIN

El aprendizaje de la programacin requiere el conocimiento de tcnicas y metodologas

de programacin estructurada. Aunque a finales del siglo XX y, sobre todo en este siglo XXI, la

programacin orientada a objetos se ha convertido en la tecnologa de software ms utilizada;

el conocimiento profundo de algoritmos y estructuras de datos, en muchos casos con el

enfoque estructurado, proporcionan los fundamentos tcnicos necesarios para entender la

programacin orientada a objetos.

PROGRAMACIN ESTRUCTURADA

La programacin estructurada naci como solucin a los problemas que presentaba la

programacin no estructurada, la cual se emple durante mucho tiempo antes de la invencin

de la programacin estructurada.

Un programa no estructurado es un programa procedimental: las instrucciones se

ejecutan en el mismo orden en que han sido escritas. Sin embargo, este tipo de programacin

emplea la instruccin "goto". Una instruccin "goto" permite pasar el control a cualquier otra

parte del programa. Cuando se ejecuta una instruccin "goto" la secuencia de ejecucin del

programa contina a partir de la instruccin indicada por "goto". De esta forma, para

comprender como funciona un programa es necesario simular su ejecucin. Esto quiere decir

que en la mayora de los casos es muy difcil comprender la lgica de un programa de este tipo.

Algunos compiladores crean referencias cruzadas a las instrucciones apuntadas por los "goto",

posibilitando una navegacin rpida a travs del cdigo fuente. Sin embargo, es algo comn en

muchos lenguajes de programacin el empleo de una variable en asociacin con el destino del

"goto", no permitiendo la creacin automtica de tablas de referencias cruzadas. Existen

problemas similares en algunos lenguajes de programacin estructurada, por ejemplo cmo

implementar las vistas en diferentes idiomas, de forma que varias personas puedan visualizar la

misma informacin, pero cada una en su idioma.


Esto se opone a la idea de utilizar algn tipo de abstraccin que permita comprender

cmo funciona realmente un programa, que es lo que hace la programacin estructurada. Lo

que podamos llamar "programacin tradicional", por ejemplo la que se utilizaba (utiliza) en la

confeccin de programas para los primitivos PCs bajo MS-DOS, o en los actuales Win-32 bajo

una "ventana" DOS, es un concepto un tanto ambiguo, pero podemos intentar una definicin

diciendo que se basa en algunas premisas y caractersticas bastante definidas. Estas

caractersticas pueden coexistir juntas o faltar alguna, pero en general se dan simultneamente.

La programacin estructurada es una tcnica para escribir programas (programacin de

computadora) de manera clara. Para ello se utilizan nicamente tres estructuras: secuencia,

seleccin e iteracin; siendo innecesario el uso de la instruccin o instrucciones de

transferencia incondicional (GOTO, EXIT FUNCTION, EXIT SUB o mltiples RETURN).

Hoy en da las aplicaciones informticas son mucho ms ambiciosas que las

necesidades de programacin existentes en los aos 1960, principalmente debido a las

aplicaciones grficas, por lo que las tcnicas de programacin estructurada no son suficientes.

Ello ha llevado al desarrollo de nuevas tcnicas, tales como la programacin orientada a

objetos y el desarrollo de entornos de programacin que facilitan la programacin de grandes

aplicaciones.

PROGRAMACIN ORIENTADA A OBJETOS

La programacin orientada a objetos o POO (OOP segn sus siglas en ingls) es un

paradigma de programacin que usa objetos y sus interacciones, para disear aplicaciones y

programas informticos. Est basado en varias tcnicas, incluyendo herencia, abstraccin,

polimorfismo y encapsulamiento. Su uso se populariz a principios de la dcada de los aos

1990. En la actualidad, existe variedad de lenguajes de programacin que soportan la

orientacin a objetos.

Los objetos son entidades que tienen un determinado estado, comportamiento

(mtodo) e identidad:
El estado est compuesto de datos, ser uno o varios atributos a los que se habrn
asignado unos valores concretos (datos).

El comportamiento est definido por los mtodos o mensajes a los que sabe responder
dicho objeto, es decir, qu operaciones se pueden realizar con l.

La identidad es una propiedad de un objeto que lo diferencia del resto, dicho con otras
palabras, es su identificador (concepto anlogo al de identificador de una variable o una
constante).

Un objeto contiene toda la informacin que permite definirlo e identificarlo frente a otros

objetos pertenecientes a otras clases e incluso frente a objetos de una misma clase, al poder

tener valores bien diferenciados en sus atributos. A su vez, los objetos disponen de

mecanismos de interaccin llamados mtodos, que favorecen la comunicacin entre ellos. Esta

comunicacin favorece a su vez el cambio de estado en los propios objetos. Esta caracterstica

lleva a tratarlos como unidades indivisibles, en las que no se separa el estado y el

comportamiento.

Los mtodos (comportamiento) y atributos (estado) estn estrechamente relacionados

por la propiedad de conjunto. Esta propiedad destaca que una clase requiere de mtodos para

poder tratar los atributos con los que cuenta. El programador debe pensar indistintamente en

ambos conceptos, sin separar ni darle mayor importancia a alguno de ellos. Hacerlo podra

producir el hbito errneo de crear clases contenedoras de informacin por un lado y clases

con mtodos que manejen a las primeras por el otro. De esta manera se estara realizando una

programacin estructurada camuflada en un lenguaje de programacin orientado a objetos.

La POO difiere de la programacin estructurada tradicional, en la que los datos y los

procedimientos estn separados y sin relacin, ya que lo nico que se busca es el

procesamiento de unos datos de entrada para obtener otros de salida. La programacin

estructurada anima al programador a pensar sobre todo en trminos de procedimientos o

funciones, y en segundo lugar en las estructuras de datos que esos procedimientos manejan.

En la programacin estructurada slo se escriben funciones que procesan datos. Los


programadores que emplean POO, en cambio, primero definen objetos para luego enviarles

mensajes solicitndoles que realicen sus mtodos por s mismos.

COMPARATIVO

PROGRAMACION PROGRAMACIN
ORIENTADA A OBJETOS ESTRUCTURADA

La programacin orientada a objetos La programacin estructurada es un


DEFINICION o POO (OOP segn sus siglas en paradigma de programacin
ingls) es un paradigma de orientado a mejorar la claridad,
programacin que usa los objetos en calidad y tiempo de desarrollo de un
sus interacciones, para disear programa de computadora, utilizando
aplicaciones y programas nicamente subrutinas y tres
informticos. Est basado en varias estructuras: secuencia, seleccin (if y
tcnicas, incluyendo herencia, switch) e iteracin(bucles for y while),
cohesin, abstraccin, polimorfismo, considerando innecesario y
acoplamiento y encapsulamiento. contraproducente el uso de la
instruccin de transferencia
incondicional (GOTO), que podra
conducir a cdigo espagueti, que es
mucho ms difcil de seguir y de
mantener, y era la causa de muchos
errores de programacin.

Los conceptos de la programacin Surgi en la dcada de 1960,


ANTECEDENTES orientada a objetos tienen origen en particularmente del trabajo Bhm y
Simula 67, un lenguaje diseado para Jacopini, y una famosa carta, la
hacer simulaciones, creado por Ole- sentencia goto considerada
Johan Dahl y Kristen Nygaard, del perjudicial, de Edsger Dijkstra en
Centro de Cmputo Noruego en Oslo. 1968 y fue reforzado tericamente
por el teorema del programa
estructurado, y prcticamente por la
aparicin de lenguajes como ALGOL
con adecuadas y ricas estructuras de
control.
Reusabilidad. Cuando hemos Los programas son ms fciles
VENTAJAS diseado adecuadamente las de entender, pueden ser ledos
clases, se pueden usar en de forma secuencial y no hay
distintas partes del programa y necesidad de hacer engorrosos
en numerosos proyectos. seguimientos en saltos de lneas
(GOTO) dentro de los bloques
Mantenibilidad. Debido a la de cdigo para intentar entender
sencillez para abstraer el la lgica.
problema, los programas
orientados a objetos son ms La estructura de los
sencillos de leer y comprender, programas es clara, puesto que
pues nos permiten ocultar las instrucciones estn ms
detalles de implementacin ligadas o relacionadas entre s.
dejando visibles slo aquellos
detalles ms relevantes. Reduccin del esfuerzo en las
pruebas y depuracin. El
Modificabilidad. La facilidad de seguimiento de los fallos o
aadir, suprimir o modificar errores del programa
nuevos objetos nos permite (debugging) se facilita debido a
hacer modificaciones de una su estructura ms sencilla y
forma muy sencilla. comprensible, por lo que los
errores se pueden detectar y
Fiabilidad. Al dividir el problema
corregir ms fcilmente.
en partes ms pequeas
podemos probarlas de manera
Reduccin de los costos de
independiente y aislar mucho
mantenimiento. Anlogamente a
ms fcilmente los posibles
la depuracin, durante la fase de
errores que puedan surgir.
mantenimiento, modificar o
extender los programas resulta
ms fcil.

Los programas son ms


sencillos y ms rpidos de
confeccionar.

Se incrementa el rendimiento de
los programadores, comparado
con la forma anterior que utiliza
GOTO.
Cambio en la forma de El principal inconveniente de este
DESVENTAJAS pensar de la programacin paradigma de programacin es
tradicional a la orientada a que se obtiene un nico bloque
objetos. de programa, que cuando se
hace demasiado grande puede
La ejecucin de programas resultar problemtico su manejo;
orientados a objetos es ms esto se resuelve empleando la
lenta. programacin modular, definiendo
mdulos interdependientes
La necesidad de utilizar programados y compilados por
bibliotecas de clases obliga separado.
a su aprendizaje y
entrenamiento. Un mtodo un poco ms
sofisticado es la programacin
por capas, en la que los mdulos
tienen una estructura jerrquica
en la que se pueden definir
funciones dentro de funciones o
de procedimientos.

EJEMPLO

Si nos detenemos a pensar sobre cmo se nos plantea un problema cualquiera en la


realidad podremos ver que lo que hay en la realidad son entidades (otros nombres que
podramos usar para describir lo que aqu llamo entidades son agentes u objetos). Estas
entidades poseen un conjunto de propiedades o atributos, y un conjunto de mtodos mediante
los cuales muestran su comportamiento. Y no slo eso, tambin podremos descubrir, a poco
que nos fijemos, todo un conjunto de interrelaciones entre las entidades, guiadas por el
intercambio de mensajes; las entidades del problema responden a estos mensajes mediante la
ejecucin de ciertas acciones. El siguiente ejemplo, aunque pueda parecer un poco extrao,
creo que aclarar algunos conceptos y nos servir como introduccin para desarrollarlos con
profundidad.

Imaginemos la siguiente situacin: un domingo por la tarde estoy en casa viendo la


televisin, y de repente mi madre siente un fuerte dolor de cabeza; como es natural, lo primero
que hago es tratar de encontrar una caja de aspirinas.
Lo que acabo de describir es una situacin que probablemente no resulte muy extraa
a muchos de nosotros. Vamos a verla en clave de objetos: el objeto hijo ha recibido un mensaje
procedente del objeto madre. El objeto hijo responde al mensaje o evento ocurrido mediante
una accin: buscar aspirinas. La madre no tiene que decirle al hijo dnde debe buscar, es
responsabilidad del hijo resolver el problema como considere ms oportuno. Al objeto madre le
basta con haber emitido un mensaje. Continuemos con la historia.

El hijo no encuentra aspirinas en el botiqun y decide acudir a la farmacia de guardia


ms cercana para comprar aspirinas. En la farmacia es atendido por una seorita que le
pregunta qu desea, a lo que el hijo responde: "una caja de aspirinas, por favor". La
farmacutica desaparece para regresar al poco tiempo con una caja de aspirinas en la mano. El
hijo paga el importe, se despide y vuelve a su casa. All le da un comprimido a su madre, la cual
al cabo de un rato comienza a experimentar una notable mejora hasta la completa
desaparicin del dolor de cabeza.

El hijo, como objeto responsable de un cometido, sabe lo que debe hacer hasta
conseguir una aspirina. Para ello entra en relacin con un nuevo objeto, la farmacutica, quien
responde al mensaje o evento de peticin del objeto hijo con la bsqueda de la aspirina. El
objeto farmacutica es ahora el responsable de la bsqueda de la aspirina. El objeto
farmacutica lanza un mensaje al objeto hijo solicitando el pago del importe, y el objeto hijo
responde a tal evento con la accin de pagar.

Como hemos podido ver, en esta situacin nos hemos encontrado con objetos que se
diferenciaban de los dems por un conjunto de caractersticas o propiedades, y por un conjunto
de acciones que realizaban en respuesta a unos eventos que se originaban en otros objetos o
en el entorno.

Tambin podemos darnos cuenta de que, aunque todos los objetos tienen propiedades
distintas, como el color del cabello, el grado de simpata o el peso, todos tienen un conjunto de
atributos en comn por ser ejemplos de una entidad superior llamada ser humano. A este
patrn de objetos (en nuestro caso ser humano) lo llamaremos clase.

Con este ejemplo espero que se entienda que los objetos son instancias o casos
concretos de las clases, que no son ms que plantillas que definen las variables y los mtodos
comunes a todos los objetos de un cierto tipo. La clase ser humano tendr, entre sus muchas
variables miembro o variables que la componen: color del cabello, color de los ojos, estatura,
peso, fecha de nacimiento, etc. A partir de una clase se podrn generar todos los objetos que
se deseen especificando valores particulares para cada una de las variables definida por la
clase. As, encontraremos el objeto farmacutica, cuyo color de cabello es rubio, color de ojos
azul, estatura 175 cm., peso 50 Kg., y as sucesivamente.
JAVA

Es Robusto

En Java no se pueden cometer los 4 errores mencionados:

Java siempre chequea los ndices al accesar un arreglo.

Java realiza chequeo de tipos durante la compilacin (al igual que C). En una
asignacin entre punteros el compilador verifica que los tipos sean compatibles.

Adems, Java realiza chequeo de tipos durante la ejecucin (cosa que C y C++ no
hacen). Cuando un programa usa un cast para accesar un objeto como si fuese de un
tipo especfico, se verifica durante la ejecucin que el objeto en cuestin sea
compatible con el cast que se le aplica. Si el objeto no es compatible, entonces se
levanta una excepcin que informa al programador la lnea exacta en donde est la
fuente del error.

Java posee un recolector de basuras que administra automticamente la memoria. Es


el recolector el que determina cuando se puede liberar el espacio ocupado por un
objeto. El programador no puede liberar explcitamente el espacio ocupado por un
objeto.

Java no posee aritmtica de punteros, porque es una propiedad que no se necesita


para programar aplicaciones. En C slo se necesita la aritmtica de punteros para
programa malloc/free o para programar el ncleo del sistema operativo.

Por lo tanto Java no es un lenguaje para hacer sistemas operativos o administradores


de memoria, pero s es un excelente lenguaje para programar aplicaciones.

Es Flexible

Pascal tambin es un lenguaje robusto, pero logra su robustez prohibiendo tener


punteros a objetos de tipo desconocido. Lamentablemente esta prohibicin es demasiado
rgida. Aunque son pocos los casos en que se necesita tener punteros a objetos de tipo
desconocido, las contorsiones que estn obligados a realizar los programadores cuando
necesitan estos punteros dan origen a programas ilegibles.

Lisp por su parte es un lenguaje flexible y robusto. Todas las variables son punteros a
objetos de cualquier tipo (un arreglo, un elemento de lista, etc.). El tipo del objeto se encuentra
almacenado en el mismo objeto. Durante la ejecucin, en cada operacin se chequea que el
tipo del objeto manipulado sea del tipo apropiado. Esto da flexibilidad a los programadores sin
sacrificar la robustez. Lamentablemente, esto hace que los programas en Lisp sean poco
legibles debido a que al estudiar su cdigo es difcil determinar cul es el tipo del objeto que
referencia una variable.

Java combina flexibilidad, robustez y legibilidad gracias a una mezcla de chequeo de


tipos durante la compilacin y durante la ejecucin. En Java se pueden tener punteros a objetos
de un tipo especfico y tambin se pueden tener punteros a objetos de cualquier tipo. Estos
punteros se pueden convertir a punteros de un tipo especfico aplicando un cast, en cuyo caso
se chequea en tiempo de ejecucin de que el objeto sea de un tipo compatible.

El programador usa entonces punteros de tipo especfico en la mayora de los casos


con el fin de ganar legibilidad y en unos pocos casos usa punteros a tipos desconocidos
cuando necesita tener flexibilidad. Por lo tanto Java combina la robustez de Pascal con la
flexibilidad de Lisp, sin que lo programas pierdan legibilidad en ningn caso.

Administra Automticamente la Memoria

En Java los programadores no necesitan preocuparse de liberar un trozo de memoria


cuando ya no lo necesitan. Es el recolector de basuras el que determina cuando se puede
liberar la memoria ocupada por un objeto.

Un recolector de basuras es un gran aporte a la productividad. Se ha estudiado en


casos concretos que los programadores han dedicado un 40% del tiempo de desarrollo a
determinar en qu momento se puede liberar un trozo de memoria.

Adems este porcentaje de tiempo aumenta a medida que aumenta la complejidad del
software en desarrollo. Es relativamente sencillo liberar correctamente la memoria en un
programa de 1000 lneas. Sin embargo, es difcil hacerlo en un programa de 10000 lneas. Y se
puede postular que es imposible liberar correctamente la memoria en un programa de 100000
lneas.

Para entender mejor esta afirmacin, supongamos que hicimos un programa de 1000
lneas hace un par de meses y ahora necesitamos hacer algunas modificaciones. Ahora hemos
olvidado gran parte de los detalles de la lgica de este programa y ya no es sencillo determinar
si un puntero referencia un objeto que todava existe, o si ya fue liberado. Peor an, suponga
que el programa fue hecho por otra persona y evale cuan probable es cometer errores de
memoria al tratar de modificar ese programa.
Ahora volvamos al caso de un programa de 100000 lneas. Este tipo de programas los
desarrolla un grupo de programadores que pueden tomar aos en terminarlo. Cada
programador desarrolla un mdulo que eventualmente utiliza objetos de otros mdulos
desarrollados por otros programadores. Quin libera la memoria de estos objetos? Cmo se
ponen de acuerdo los programadores sobre cundo y quin libera un objeto compartido?
Como probar el programa completo ante las infinitas condiciones de borde que pueden existir
en un programa de 100000 lneas?

Es inevitable que la fase de prueba dejar pasar errores en el manejo de memoria que slo
sern detectados ms tarde por el usuario final. Probablemente se incorporn otros errores en
la fase de mantencin.

Se puede concluir:

Todo programa de 100000 lneas que libera explcitamente la memoria tiene errores
latentes.
Sin un recolector de basuras no hay verdadera modularidad.
Un recolector de basuras resuelve todos los problemas de manejo de memoria en
forma trivial.

La pregunta es: Cul es el impacto de un recolector de basura en el desempeo de un


programa?

El sobrecosto de la recoleccin de basuras no es superior al 100%. Es decir si se tiene


un programa que libera explcitamente la memoria y que toma tiempo X, el mismo programa
modificado de modo que utilice un recolector de basuras para liberar la memoria tomar un
tiempo no superior a 2X.

Este sobrecosto no es importante si se considera el peridico incremento en la


velocidad de los procesadores. El impacto que un recolector de basura en el tiempo de
desarrollo y en la confiabilidad del software resultante es muchos ms importante que la
prdida en eficiencia.

CONCLUSIONES

Los programas son ms fciles de entender, ya que pueden ser ledos de forma
secuencial.

La estructura del programa es clara, puesto que las instrucciones estn ms ligadas o
relacionadas entre s.
Reduccin del esfuerzo en las pruebas, por lo que los errores se pueden detectar y
corregir ms fcil.

Reduccin de los costos de Mantenimiento de los programas.

Programas ms sencillos y ms rpidos (ya que es ms fcil su Optimizacin).

Abstraccin: Denota las caractersticas esenciales de un objeto, donde se capturan sus


comportamientos.

Encapsulamiento: Significa reunir todos los elementos que pueden considerarse


pertenecientes a una misa entidad, al mismo nivel de abstraccin.

Principio de ocultacin: Cada objeto est aislado del exterior, es un mdulo natural, y cada
tipo de objeto expone una interfaz a otros objetos que especfica cmo pueden interactuar
con los objetos de la clase.

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.

Herencia: Los objetos heredan las propiedades y el comportamiento de todas las clases a
las que pertenecen.

Recoleccin de basura: la Recoleccin de basura o Garbage Collector es la tcnica por la


cual el ambiente de Objetos se encarga de destruir automticamente, y por tanto
desasignar de la memoria los Objetos que hayan quedado sin ninguna referencia a ello.

FUENTES

http://www.luis.izqui.org/resources/ProgOrientadaObjetos.pdf
http://www.bloodshed.net/

Das könnte Ihnen auch gefallen