Sie sind auf Seite 1von 35

La Programacin Orientada a Objetos (POO u OOPsegn sus siglas en ingls)

es un paradigma de programacin que usa objetos y sus interacciones para


disear aplicaciones y programas de computadora. Est basado en varias
tcnicas, incluyendo herencia, modularidad, polimorfismo, y encapsulamiento.
Su uso se populariz a principios de la dcada de 1990. Actualmente son
muchos los lenguajes de programacin que soportan la orientacin a objetos.
(4)
El trmino de Programacin Orientada a Objetos indica ms una forma de diseo y
una metodologa de desarrollo desoftware que un lenguaje de programacin, ya que
en realidad se puede aplicar el Diseo Orientado a Objetos (Eningls abreviado
OOD, Object Oriented Design), a cualquier tipo de lenguaje de programacin.
El desarrollo de la OOP empieza a destacar durante la dcada de lo 80 tomando en
cuenta la programacin estructurada, a la que engloba y dotando al programador
de nuevos elementos para el anlisis y desarrollo de software.(1)

La programacin Orientada a objetos (POO) es una forma especial de programar, ms


cercana a como expresaramos las cosas en la vida real que otros tipos de
programacin.
Con la POO tenemos que aprender a pensar las cosas de una manera distinta, para
escribir nuestros programas en trminos de objetos, propiedades, mtodos y otras
cosas que veremos rpidamente para aclarar conceptos y dar una pequea base que
permita soltarnos un poco con este tipo de programacin.
Cmo se piensa en objetos
Pensar en trminos de objetos es muy parecido a cmo lo haramos en la vida real. Por
ejemplo vamos a pensar en un coche para tratar de modelizarlo en un esquema de
POO. Diramos que el coche es el elemento principal que tiene una serie de
caractersticas, como podran ser el color, el modelo o la marca. Adems tiene una
serie de funcionalidades asociadas, como pueden ser ponerse en marcha, parar o
aparcar.
Pues en un esquema POO el coche sera el objeto, las propiedades seran las
caractersticas como el color o el modelo y los mtodos seran las funcionalidades
asociadas como ponerse en marcha o parar.(2)
La programacin orientada a objetos, intenta simular el mundo real a traves del
significado de objetos que contiene caracteristicas y funciones. Los lenguajes
orientados a objetos se clasifican como lenguajes de quinta generacion.

Como su mismo nombre indica, la programacin orientada a objetos se basa en la idea


de un objeto, que es una combinacion de variables locales y procedimientos llamados
metodos que juntos conforman una entidad de programacin.(3)

La POO es un paradigma de la programacin de computadores; esto hace referencia al


conjunto de teoras, estndares, modelos y mtodos que permiten organizar el
conocimiento, proporcionando un medio bien definido para visualizar el dominio del
problema e implementar en un lenguaje de programacin la solucin a ese problema.
La POO se basa en el modelo objeto, donde el elemento principal es le objeto, el cual
es una unidad que contiene todas sus caractersticas y comportamientos en s misma,
lo cual lo hace como un todo independiente, pero que se interrelaciona con objetos de
su misma clase o de otras clase, como sucede en el mundo real.(5)

Programacin orientada a objetos


Este artculo o seccin necesita referencias que aparezcan en una publicacin acreditada,
como revistas especializadas, monografas, prensa diaria o pginas de Internet fidedignas. Este
aviso fue puesto el 14 de febrero de 2015.
Puedes aadirlas o avisar al autor principal del artculo en su pgina de discusin
pegando: {{subst:Aviso referencias|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 en sus interacciones, para disear
aplicaciones y programas informticos. Est basado en varias tcnicas,
incluyendo herencia, cohesin, abstraccin, polimorfismo, acoplamiento y encapsulamiento.
Su uso se populariz a principios de la dcada de los aos 1990. En la actualidad, existe una
gran variedad de lenguajes de programacin que soportan la orientacin a objeto.
ndice
[ocultar]

1 Introduccin

2 Origen

3 Conceptos fundamentales

4 Caractersticas de la POO

5 Resumen

6 Algunos lenguajes orientados a objetos

7 Vase tambin

8 Notas y referencias

9 Enlaces externos

Introduccin[editar]
Los objetos son entidades que tienen un determinado estado, comportamiento
(mtodo) e identidad:

El estado est compuesto de datos o informaciones; sern 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 solo se escriben funciones que procesan datos. Los
programadores que emplean programacin orientada a objetos, en cambio, primero definen
objetos para luego enviarles mensajes solicitndoles que realicen sus mtodos por s mismos.

Origen[editar]
Los conceptos de la programacin orientada a objetos tienen origen en Simula 67, un lenguaje
diseado para hacer simulaciones, creado por Ole-Johan Dahl y Kristen Nygaard, del Centro
de Cmputo Noruego en Oslo. En este centro se trabajaba en simulaciones de naves, que
fueron confundidas por la explosin combinatoria de cmo las diversas cualidades de

diferentes naves podan afectar unas a las otras. La idea surgi al 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 ms tarde en Smalltalk, desarrollado
en Simula en Xerox PARC (cuya primera versin fue escrita sobre Basic) pero diseado para
ser un sistema completamente dinmico en el cual los objetos se podran crear y modificar
"sobre la marcha" (en tiempo de ejecucin) en lugar de tener un sistema basado en programas
estticos.
La programacin orientada a objetos se fue convirtiendo en el estilo de programacin
dominante a mediados de los aos ochenta, en gran parte debido a la influencia de C++, una
extensin del lenguaje de programacin C. Su dominacin fue consolidada gracias al auge de
las Interfaces grficas de usuario, para las cuales la programacin orientada a objetos est
particularmente bien adaptada. En este caso, se habla tambin de programacin dirigida por
eventos.
Las caractersticas de orientacin a objetos fueron agregadas a muchos lenguajes existentes
durante ese tiempo, incluyendo Ada, BASIC, Lisp ms Pascal, entre otros. La adicin de estas
caractersticas a los lenguajes que no fueron diseados inicialmente para ellas condujo a
menudo a problemas de compatibilidad y en la capacidad de mantenimiento del cdigo. Los
lenguajes orientados a objetos "puros", por su parte, carecan de las caractersticas de las
cuales muchos programadores haban venido a depender. Para saltar este obstculo, se
hicieron muchas tentativas para crear nuevos lenguajes basados en mtodos orientados a
objetos, pero permitiendo algunas caractersticas 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
aparicin de Internet y a la implementacin de la mquina virtual de Java en la mayora
de navegadores. PHP en su versin 5 se ha modificado; soporta una orientacin completa a
objetos, cumpliendo todas las caractersticas propias de la orientacin a objetos.

Conceptos fundamentales[editar]
La programacin orientada a objetos es una forma de programar que trata de encontrar una
solucin a estos problemas. Introduce nuevos conceptos, que superan y amplan conceptos
antiguos ya conocidos. Entre ellos destacan los siguientes:
Clase
Definiciones de las propiedades y comportamiento de un tipo de objeto concreto. La
instanciacin es la lectura de estas definiciones y la creacin de un objeto a partir de
ella.
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 si esos
atributos y operaciones hubiesen sido definidos por la misma D. Por lo tanto, puede
usar los mismos mtodos y variables pblicas declaradas en C. Los componentes
registrados como "privados" (private) tambin se heredan, pero como no pertenecen a
la clase, se mantienen escondidos al programador y slo pueden ser accedidos a
travs de otros mtodos pblicos. Esto es as para mantener hegemnico el ideal de
POO.
Objeto
Instancia de una clase. Entidad provista de un conjunto de propiedades o atributos
(datos) y de comportamiento o funcionalidad (mtodos), los mismos que
consecuentemente reaccionan a eventos. Se corresponden con los objetos reales del
mundo que nos rodea, o con objetos internos del sistema (del programa). Es una
instancia a una clase.

Mtodo
Algoritmo asociado a un objeto (o a una clase de objetos), cuya ejecucin se
desencadena tras la recepcin de un "mensaje". Desde el punto de vista del
comportamiento, es lo que el objeto puede hacer. Un mtodo puede producir un
cambio en las propiedades del objeto, o la generacin de un "evento" con un nuevo
mensaje para otro objeto del sistema.
Evento
Es un suceso en el sistema (tal como una interaccin del usuario con la mquina, o un
mensaje enviado por un objeto). El sistema maneja el evento enviando el mensaje
adecuado al objeto pertinente. Tambin se puede definir como evento la reaccin que
puede desencadenar un objeto; es decir, la accin que genera.
Atributos
Caractersticas que tiene la clase.
Mensaje
Una comunicacin dirigida a un objeto, que le ordena que ejecute uno de sus mtodos
con ciertos parmetros 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
caractersticas predeterminadas, y cuyo valor puede ser alterado por la ejecucin de
algn mtodo.
Estado interno
Es una variable que se declara privada, que puede ser nicamente accedida y alterada
por un mtodo 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 mtodos.
Identificacin de un objeto
Un objeto se representa por medio de una tabla o entidad que est compuesta por sus
atributos y funciones correspondientes.
En comparacin con un lenguaje imperativo, una
"variable" no es ms que un contenedor interno
del atributo del objeto o de un estado interno, as
como la "funcin" es un procedimiento interno del
mtodo del objeto.

Caractersticas de la POO[editar]
Existe un acuerdo acerca de qu caractersticas
contempla la "orientacin a objetos". Las
caractersticas siguientes son las ms
importantes:
Abstraccin
Denota las caractersticas 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 cmo se implementan estas caractersticas.
Los procesos, las funciones o los mtodos pueden tambin ser abstrados, y, cuando
lo estn, una variedad de tcnicas son requeridas para ampliar una abstraccin. El
proceso de abstraccin permite seleccionar las caractersticas relevantes dentro de un

conjunto e identificar comportamientos comunes para definir nuevos tipos de entidades


en el mundo real. La abstraccin es clave en el proceso de anlisis y diseo 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 todos los elementos que pueden considerarse pertenecientes a una
misma entidad, al mismo nivel de abstraccin. Esto permite aumentar la cohesin de
los componentes del sistema. Algunos autores confunden este concepto con el
principio de ocultacin, principalmente porque se suelen emplear conjuntamente.
Modularidad
Se denomina modularidad a la propiedad que permite subdividir una aplicacin en
partes ms pequeas (llamadas mdulos), cada una de las cuales debe ser tan
independiente como sea posible de la aplicacin en s y de las restantes partes. Estos
mdulos se pueden compilar por separado, pero tienen conexiones con otros mdulos.
Al igual que la encapsulacin, los lenguajes soportan la modularidad de diversas
formas.
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 especifica cmo pueden interactuar con los
objetos de la clase. El aislamiento protege a las propiedades de un objeto contra su
modificacin por quien no tenga derecho a acceder a ellas; solamente los propios
mtodos internos del objeto pueden acceder a su estado. Esto asegura que otros
objetos no puedan cambiar el estado interno de un objeto de manera inesperada,
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 abstraccin. La aplicacin 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 invocacin de un
comportamiento en una referencia producir el comportamiento correcto para el tipo
real del objeto referenciado. Cuando esto ocurre en "tiempo de ejecucin", esta ltima
caracterstica se llama asignacin tarda o asignacin dinmica. Algunos lenguajes
proporcionan medios ms estticos (en "tiempo de compilacin") de polimorfismo,
tales como las plantillas y la sobrecarga de operadores de C++.
Herencia
Las clases no se encuentran aisladas, sino que se relacionan entre s, formando una
jerarqua de clasificacin. 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 comn. Cuando un objeto hereda de ms de una clase se
dice que hayherencia mltiple; siendo de alta complejidad tcnica por lo cual suele
recurrirse a la herencia virtual para evitar la duplicacin de datos.
Recoleccin de basura
La recoleccin de basura o garbage collection es la tcnica por la cual el entorno de
objetos se encarga de destruir automticamente, 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 asignacin o liberacin de memoria,


ya que el entorno la asignar al crear un nuevo objeto y la liberar cuando nadie lo
est usando. En la mayora de los lenguajes hbridos que se extendieron para soportar
el Paradigma de Programacin Orientada a Objetos como C++ u Object Pascal, esta
caracterstica no existe y la memoria debe desasignarse expresamente.

Polimorfismo en Programacin
Orientada a Objetos

Por Miguel Angel lvarez

20 de mayo de 2014

23 Comentarios

Desarrollo, Programacin

Qu es el polimorfismo en la Programacin Orientada a


Objetos, el motivo de su existencia y cmo implementar
polimorfismo en clases y objetos.
El concepto de polimorfismo es en realidad algo muy bsico. Realmente, cuando
estamos aprendiendo Programacin Orientada a Objetos (tambin conocida por
sus siglas POO / OOP) muchos estudiantes nos hacemos un embolado tremendo
al tratar de entender el concepto, pero en su base es algo extremadamente
sencillo.
Trataremos de explicarlo en este artculo con palabras sencillas, pero para los
valientes, aqu va una primera definicin que no es ma y que carece de la
prometida sencillez. Pero no te preocupes, pues la entiendas o no, luego lo
explicar todo de manera ms llana.

Definicin: El polimorfismo es una relajacin del sistema de tipos, de tal manera

que una referencia a una clase (atributo, parmetro o declaracin local o elemento
de un vector) acepta direcciones de objetos de dicha clase y de sus clases
derivadas (hijas, nietas, ).
Nota: Esta es la definicin acadmica que nos ofrece el profesor de la UPM Luis Fernndez, del que fui
alumno en la universidad y en EscuelaIT.

Herencia y las clasificaciones en


Programacin Orientada a Objetos
Para poder entender este concepto de OOP necesitas entender otras cosas
previas, como es el caso de la herencia. Esto lo hemos explicado en un artculo
anterior en DesarrolloWeb.com: Herencia en la Programacin Orientada a Objetos.
Veremos que el polimorfismo y la herencia son dos conceptos estrechamente
ligados. Conseguimos implementar polimorfismo en jerarquas de clasificacin que
se dan a travs de la herencia. Por ejemplo, tenemos una clase vehculo y de ella
dependen varias clases hijas como coche, moto, autobs, etc.

Pero antes de entender todo esto, queremos ir un poco ms hacia atrs,


entendiendo lo que es un sistema de tipos.

Por qu el sistema de tipos es importante


en Polimorfismo
Muchos de los lectores que asumo se introducen en el concepto de polimorfismo a
travs de este artculo han aprendido a programar en lenguajes dbilmente tipados,
como es el caso de PHP y Javascript. Por ello es conveniente entender cmo es
un lenguaje fuertemente tipado, como es el caso de Java o C.
En estos lenguajes, cuando defino una variable, siempre tengo que decir el tipo de
datos que va a contener esta variable. Por ejemplo:
int miNumero;

As le indicamos que la variable declarada "miNumero" va a contener siempre un


entero. Podrs asignarle diversos valores, pero siempre deben de ser nmeros
enteros. De lo contrario el compilador te lanzar un mensaje de error y no te
permitir compilar el programa que has realizado.
Esto incluso pasa con los objetos. Por ejemplo, si en Java defino la clase
"Largometraje" (una cinta que se puede exhibir en la televisin o el cine), cuando
creo objetos de la clase "Largometraje" debo declarar variables en las que indique
el tipo de objeto que va a contener.

Largometraje miLargo = new Largometraje("Lo que el viento se


llev");

Esa variable "miLargo", por declaracin tendr una referencia a un objeto de la


clase "Largometraje". Pues bien, durante toda su vida, deber tener siempre una
referencia a cualquier objeto de la misma clase. O sea, maana no podremos
guardar un entero en la variable, ni una cadena u otro objeto de otra clase.
Volviendo al ejemplo de los vehculos, si defino una variable que apunta a un
objeto de clase "Coche", durante toda la vida de esa variable tendr que contener
un objeto de la clase Coche, no pudiendo ms adelante apuntar a un objeto de la
clase Moto o de la clase Bus. Esta rigidez, como decimos, no existe en los
lenguajes dbilmente tipados como es el caso de Javascript o PHP, sin embargo
es una caracterstica habitual de lenguajes como Java, que son fuertemente
tipados.
Coche miCoche = new Coche("Ford Focus 2.0");
//la variable miCoche apunta a un objeto de la clase coche
//si lo deseo, maana podr apuntar a otro objeto diferente, pero
siempre tendr que ser de la clase Coche
miCoche = new Coche("Renault Megane 1.6");

Lo que nunca podr hacer es guardar en esa variable, declarada como tipo Coche,
otra cosa que no sea un objeto de la clase Coche.
//si miCoche fue declarada como tipo Coche, no puedo guardar un
objeto de la clase Moto
miCoche = new Moto("Yamaha YBR");
//la lnea anterior nos dara un error en tiempo de compilacin

Fjate que en este punto no te estoy hablando todava de polimorfismo, sino de


algo de la programacin en general como es el sistema de tipos. Sin embargo, tienes
que amoldar la cabeza a esta restriccin de lenguajes fuertemente tipados para que
luego puedas entender por qu el polimorfismo es importante y clave en la
programacin orientada a objetos. Y ojo, insisto que esto es algo relacionado con
lenguajes fuertemente tipados (tambin llamados de tipado esttico), en PHP no

habra problema en cambiar el tipo de una variable, asignando cualquier otra cosa,
dado que no se declaran los tipos al crear las variables.
Entendida esa premisa, pensemos en el concepto de funcin y su uso en
lenguajes de tipado esttico.
Nota: A veces, a los lenguajes fuertemente tipados se les llama de "tipado esttico" y a los dbilmente
tipados se les llama "tipado dinmico". Si quieres saber ms sobre lenguajes tipados y no tipados, te
recomiendo ver el #programadorIO tipados Vs no tipados.

Cuando en un lenguaje fuertemente tipado declaramos una funcin, siempre


tenemos que informar el tipo de los parmetros que va a recibir. Por ejemplo, la
funcin "sumaDosNumeros()" recibir dos parmetros, que podrn ser de tipo
entero.
function sumaDosNumeros(int num1, int num2)

A esta funcin, tal como est declarada, no le podremos pasar como parmetros
otra cosa que no sean variables -o literales- con valores de nmero entero. En
caso de pasar otros datos con otros tipos, el compilador te alertar. Osea, si
intentas invocar sumaDosNumeros("algo", "otro"), el compilador no te dejar
compilar el programa porque no ha encontrado los tipos esperados en los
parmetros de la funcin.
Esto mismo de los parmetros en las funciones te ocurre tambin con los atributos
de las clases, cuyos tipos tambin se declaran, con los datos que se insertan en
un array, etc. Como ves, en estos lenguajes como Java el tipado se lleva a todas
partes.

Polimorfismo en objetos
Ahora prate a pensar en clases y objetos. Qudate con esto: Tal como funcionan
los lenguajes fuertemente tipados, una variable siempre deber apuntar a un objeto de
la clase que se indic en el momento de su declaracin. Una funcin cuyo parmetro

se haya declarado de una clase, slo te aceptar recibir objetos de esa clase. Un
array que se ha declarado que es de elementos de una clase determinada, solo
aceptar que rellenemos sus casillas con objetos de esa clase declarada.
Vehiculo[] misVehiculos = new Vehiculo[3];

Esa variable misVehiculos es un array y en ella he declarado que el contenido de


las casillas sern objetos de la clase "Vehiculo". Como se ha explicado, en
lenguajes fuertemente tipados slo podra contener objetos de la clase Vehiculo.
Pues bien, polimorfismo es el mecanismo por el cual podemos "relajar el sistema de
tipos", de modo que nos acepte tambin objetos de las clases hijas o derivadas.

Por tanto, la "relajacin" del sistema de tipos no es total, sino que tiene que ver
con las clasificaciones de herencia que tengas en tus sistemas de clases. Si
defines un array con casillas de una determinada clase, el compilador tambin te
aceptar que metas en esas casillas objetos de una clase hija de la que fue
declarada. Si declaras que una funcin recibe como parmetros objetos de una
determinada clase, el compilador tambin te aceptar que le enves en la
invocacin objetos de una clase derivada de aquella que fue declarada.
En concreto, en nuestro array de vehculos, gracias al polimorfismo podrs
contener en los elementos del array no solo vehculos genricos, sino tambin
todos los objetos de clases hijas o derivadas de la clase "Vehiculo", osea objetos
de la clase "Coche", "Moto", "Bus" o cualquier hija que se haya definido.

Para qu nos sirve en la prctica el


polimorfismo
Volvamos a la clase "Largometraje" y ahora pensemos en la clase "Cine". En un
cine se reproducen largometrajes. Puedes, no obstante, tener varios tipos de
largometrajes, como pelculas o documentales, etc. Quizs las pelculas y
documentales tienen diferentes caractersticas, distintos horarios de audiencia,
distintos precios para los espectadores y por ello has decidido que tu clase
"Largometraje" tenga clases hijas o derivadas como "Pelcula" y "Documental".
Imagina que en tu clase "Cine" creas un mtodo que se llama "reproducir()". Este
mtodo podr recibir como parmetro aquello que quieres emitir en una sala de
cine y podrn llegarte a veces objetos de la clase "Pelcula" y otras veces objetos
de la clase "Documental". Si has entendido el sistema de tipos, y sin entrar todava
en polimorfismo, debido a que los mtodos declaran los tipos de los parmetros
que recibes, tendrs que hacer algo como esto:

reproducir(Pelicula peliculaParaReproducir)

Pero si luego tienes que reproducir documentales, tendrs que declarar:


reproducir(Documental documentaParaReproducir)

Probablemente el cdigo de ambos mtodos sea exactamente el mismo. Poner la


pelcula en el proyector, darle al play, crear un registro con el nmero de entradas
vendidas, parar la cinta cuando llega al final, etc. Realmente es necesario hacer
dos mtodos? De acuerdo, igual no te supone tanto problema, pero si maana te
mandan otro tipo de cinta a reproducir, como la grabacin de la final del mundial
de ftbol en 3D? Tendrs que crear un nuevo mtodo reproducir() sobre la clase
"Cine" que te acepte ese tipo de emisin? es posible ahorrarnos todo ese
mantenimiento?
Aqu es donde el polimorfismo nos ayuda. Podras crear perfectamente un mtodo
"reproducir()" que recibe un largometraje y donde podrs recibir todo tipo de
elementos, pelculas, documentales y cualquier otra cosa similar que sea creada
en el futuro.
Entonces lo que te permiten hacer los lenguajes es declarar el mtodo
"reproducir()" indicando que el parmetro que vas a recibir es un objeto de la clase
padre "Largometraje", pero donde realmente el lenguaje y compilador te aceptan
cualquier objeto de la clase hija o derivada, "Pelcula", "Documental", etc.
reproducir(Largometraje elementoParaReproducir)

Podremos crear pelculas y reproducirlas, tambin crear documentales para luego


reproducir y lo bonito de la historia es que todos estos objetos son aceptados por
el mtodo "reproducir()", gracias a la relajacin del sistema de tipos. Incluso, si
maana quieres reproducir otro tipo de cinta, no tendrs que tocar la clase "Cine" y
el mtodo "reproducir()". Siempre que aquello que quieras reproducir sea de la
clase "Largometraje" o una clase hija, el mtodo te lo aceptar.
Pongamos otro ejemplo por si acaso no ha quedado claro con lo visto hasta el

momento, volviendo de nuevo a la clase Vehiculo. Adems nos centramos en la

utilidad del polimorfismo y sus posibilidades para reducir el mantenimiento de los


programas informticos, que es lo que realmente me gustara que se entienda.
Tenemos la clase Parking. Dentro de sta tenemos un mtodo estacionar(). Puede
que en un parking tenga que estacionar coches, motos o autobuses. Sin
polimorfismo tendra que crear un mtodo que permitiese estacionar objetos de la
clase "Coche", otro mtodo que acepte objetos de la clase "Moto" para
estacionarlos, etc. Pero todos estaremos de acuerdo que estacionar un coche, una
moto o un bus es bastante similar: "entrar en el parking, recoger el ticket de
entrara, buscar una plaza, situar el vehculo dentro de esa plaza...".
Lo ideal sera que nuestro mtodo me permita permita recibir todo tipo de
vehculos para estacionarlos, primero por reutilizacin del cdigo, ya que es muy
parecido estacionar uno u otro vehculo, pero adems porque as si maana el
mercado trae otro tipo de vehculos, como una van, todoterreno hibrido, o una nave
espacial, mi software sea capaz de aceptarlos sin tener que modificar la clase
Parking.
Gracias al polimorfismo, cuando declaro la funcin estacionar() puedo decir que
recibe como parmetro un objeto de la clase "Vehiculo" y el compilador me
aceptar no solamente vehculos genricos, sino todos aquellos objetos que
hayamos creado que hereden de la clase Vehculo, osea, coches, motos, buses,
etc. Esa relajacin del sistema de tipos para aceptar una gama de objetos
diferente es lo que llamamos polimorfismo.

En fin, esto es lo que significa polimorfismo. A partir de aqu puede haber otra
serie de consideraciones y recomendaciones, as como caractersticas
implementadas en otros lenguajes, pero explicar todo eso no es el objetivo de este
artculo. Esperamos que con lo que has aprendido puedas orientar mejor tus
estudios de Programacin Orientada a Objetos. Si quieres ms informacin sobre
el tema lee el artculo Qu es Programacin Orientada a Objetos, que seguro te
ser de gran utilidad.

Polimorfismo (informtica)
Existen desacuerdos sobre la exactitud de la informacin en este artculo o seccin.
En la pgina de discusin puedes consultar el debate al respecto.

En programacin orientada a objetos, el polimorfismo se refiere a la propiedad por la que es


posible enviar mensajes sintcticamente iguales a objetos de tipos distintos. El nico requisito
que deben cumplir los objetos que se utilizan de manera polimrfica es saber responder al
mensaje que se les enva.
La apariencia del cdigo puede ser muy diferente dependiendo del lenguaje que se utilice,
ms all de las obvias diferencias sintcticas.
Por ejemplo, en un lenguaje de programacin que cuenta con un sistema de tipos dinmico
(en los que las variables pueden contener datos de cualquier tipo u objetos de cualquier clase)
como Smalltalk no se requiere que los objetos que se utilizan de modo polimrfico sean parte
de una jerarqua de clases.
ndice
[ocultar]

1 Descripcin

2 Clasificacin

3 Ejemplo de polimorfismo

4 Polimorfismo desde una interfaz

5 Diferencias entre polimorfismo y sobrecarga

6 Referencias

Descripcin[editar]
En lenguajes basados en clases y con un sistema de tipos de datos fuerte
(independientemente de si la verificacin se realiza en tiempo de compilacin o de ejecucin),
es posible que el nico modo de poder utilizar objetos de manera polimrfica sea que
compartan una raz comn, es decir, una jerarqua de clases, ya que esto proporciona la
compatibilidad de tipos de datos necesaria para que sea posible utilizar una misma variable de
referencia (que podr apuntar a objetos de diversas subclases de dicha jerarqua) para enviar
el mismo mensaje (o un grupo de mensajes) al grupo de objetos que se tratan de manera
polimrfica.
No obstante, algunos lenguajes de programacin (Java, C++) permiten que dos objetos de
distintas jerarquas de clases respondan a los mismos mensajes, a travs de las
denominadas interfaces (esta tcnica se conoce como composicin de objetos). Dos objetos
que implementen la misma interfaz podrn ser tratados de forma idntica, como un mismo tipo
de objeto, el tipo definido por la interfaz. As, distintos objetos podrn intercambiarse en tiempo
de ejecucin siempre que sean del mismo tipo, y adems con dependencias mnimas entre

ellos. Por estos motivos se considera un buen principio de diseo en programacin orientada
a objetos el favorecer la composicin de objetos frente a la herencia de clases. 1
En Java las interfaces se declaran mediante la palabra clave Interface. Estas se utilizan
para lograr la necesaria concordancia de tipos que hace posible el polimorfismo, tambin
como un contrato que debe cumplir cualquier clase que implemente una cierta interfaz, y como
una forma de documentacin para los desarrolladores. A veces, en la literatura especfica
sobre Java se habla de "herencia y polimorfismo de interfaces", lo que no concuerda con los
conceptos de la programacin orientada a objetos porque una clase que implementa una
interfaz slo obtiene su tipo de datos y la obligacin de implementar sus mtodos, no copia
comportamiento ni atributos. Esta terminologa puede llevar a confusin, puesto que en Java a
menudo se utiliza la mal llamada "herencia de interfaces" para dotar a una clase de uno o
varios tipos adicionales, lo que unido a la composicin, evite la necesidad de la herencia
mltiple y favorezca una utilizacin ms amplia del polimorfismo.
No obstante, el uso de una jerarqua de clases como paso previo, es muy habitual incluso en
aquellos lenguajes en los que es posible prescindir de tal jerarqua, ya que, desde una
perspectiva conceptual, se puede decir que al pertenecer los "objetos polimrficos" a
subclases de una misma jerarqua, se asegura la equivalencia semntica de los mensajes que
se invocarn de modo polimrfico. Por esto, en programacin orientada a objetos a veces se
denomina al polimorfismo como "polimorfismo de subclase (o de subtipo)".
En resumen, en la programacin orientada a objetos, la esencia del polimorfismo no atae a la
clase o prototipo de la que provienen los objetos. Aun as, en los lenguajes basados en clases,
es habitual (y en algunos tal vez sea el nico modo) que dichos objetos pertenezcan a
subclases pertenecientes a una misma jerarqua. Entonces, el polimorfismo debe verse como
una forma flexible de usar un grupo de objetos (como si fueran slo uno). Podra decirse
que el polimorfismo en esencia refiere al comportamiento de los objetos, no a su
pertenencia a una jerarqua de clases (o a sus tipos de datos).
Lo anterior se hace an ms evidente en lenguajes de programacin orientada a objetos
basados en prototipos, como Self, en los que las clases no existen.
Adems, es importante remarcar que si un cierto grupo de objetos pueden utilizarse de
manera polimrfica es porque, en ltima instancia, todos ellos saben responder a un cierto
mensaje (o a varios), pero dado que esos mismos objetos generalmente contendrn otros
mtodos (que otros objetos en dicho grupo no contienen), difcilmente se pueda decir lisa y
llanamente que los objetos son polimrficos; lo correcto es decir que esos objetos se pueden
utilizar de modo polimrfico para un cierto conjunto de mensajes.
Un ejemplo. Podemos crear dos clases distintas: Pez y Ave que heredan de
la superclaseAnimal. La clase Animal tiene el mtodo abstracto mover que se implementa de
forma distinta en cada una de las subclases (peces y aves se mueven de forma distinta).
Entonces, un tercer objeto puede enviar el mensaje mover a un grupo de objetos Pezy Avepor
medio de una variable de referencia de clase Animal, haciendo as un uso polimrfico de
dichos objetos respecto del mensaje mover.
El concepto de polimorfismo, desde una perspectiva ms general, se puede aplicar tanto a
funciones como a tipos de datos. As nacen los conceptos de funciones polimrficas ytipos
polimrficos. Las primeras son aquellas funciones que pueden evaluarse o ser aplicadas a
diferentes tipos de datos de forma indistinta; los tipos polimrficos, por su parte, son aquellos
tipos de datos que contienen al menos un elemento cuyo tipo no est especificado.

Clasificacin[editar]
Se puede clasificar el polimorfismo en dos grandes clases:

Polimorfismo dinmico (o polimorfismo paramtrico) es aqul en el que el cdigo


no incluye ningn tipo de especificacin sobre el tipo de datos sobre el que se trabaja. As,
puede ser utilizado a todo tipo de datos compatible.

Polimorfismo esttico (o polimorfismo ad hoc) es aqul en el que los tipos a los


que se aplica el polimorfismo deben ser explcitos y declarados uno por uno antes de
poder ser utilizados.

El polimorfismo dinmico unido a la herencia es lo que en ocasiones se conoce


como programacin genrica.
Tambin se clasifica en herencia por redefinicin de mtodos abstractos y por mtodo
sobrecargado. El segundo hace referencia al mismo mtodo con diferentes parmetros.
Otra clasificacin agrupa los polimorfismo en dos tipos: Ad-Hoc que incluye a su vez
sobrecarga de operadores y coercin, Universal (inclusin o controlado por la herencia,
paramtrico o genericidad).

Ejemplo de polimorfismo[editar]
En el siguiente ejemplo hacemos uso del lenguaje C++ para ilustrar el polimorfismo. Se
observa a la vez el uso de las funciones virtuales puras, como se les conoce en C++, estas
funciones constituyen una interfaz ms consistente cuando se trabaja con una jerarqua de
clases, puesto que hacen posible el enlace durante la ejecucin. Sin embargo como se ver,
para que el polimorfismo funcione no es una condicin obligatoria que todas las funciones en
la clase base sean declaradas como virtuales.

Diagrama de clases UML, que describe grficamente la relacin entre la clase base Figura y sus
posibles clases derivadas, y la entidad que utiliza esta estructura: la Aplicacin, tambin identificado
como objeto Cliente.

#include<iostream>
using namespace std;

class Figura {
private:
float base;
float altura;
public:
void captura();
virtual unsigned float perimetro()=0;
virtual unsigned float area()=0;
};
class Rectangulo: public Figura {
public:
void imprime();
unsigned float perimetro(){return 2*(base+altura);}
unsigned float area(){return base*altura;}
};
class Triangulo: public Figura {
public:
void muestra();
unsigned float perimetro(){return 2*altura+base}
unsigned float area(){return (base*altura)/2;}
};
void Figura::captura()
{
cout << "CALCULO DEL AREA Y PERIMETRO DE UN TRIANGULO ISSCELES Y UN
RECTANGULO:" << endl;
cout << "escribe la altura: ";
cin >> altura;
cout << "escribe la base: ";
cin >> base;
cout << "EL PERIMETRO ES: " << perimetro();
cout << "EL AREA ES: " << area();
getchar();
return 0;
}

Polimorfismo desde una interfaz[editar]


Aunque el polimorfismo es el mismo se aplique donde se aplique, el modo en que se aplica
desde una interfaz puede resultar un poco ms oscuro y difcil de entender. Se expone un
sencillo ejemplo (en VB-NET) comentado para entender como funciona aplicado desde una
interfaz, primero se escribe el cdigo y luego se comenta el funcionamiento. Nota: para no
enturbiar el cdigo en exceso, todo lo que no se declara privado se sobreentiende pblico.

' Declaramos una interfaz llamada IOperar y declaramos una funcin


llamada Operar
' que implementarn las clases deseadas:
Interface IOperar
Function Operar(valor1 as integer, valor2 as integer) as long
End Interface
' Declaramos una clase que trabaja ms alejada del usuario y que
contendra funciones comunes
' para las siguiente clase, si no fueran idnticas iran en la
interfaz,
' pero al caso de mostrar el polimorfismo se suponen idnticas:
Class Operacion
Function Calcular(clasellamante as Object) as Long
' aqu ira el cdigo comn a todas las operaciones.... que llaman
a esa funcin
' por ejemplo recoger los 2 valores de la operacin, chequear que
estn en el rango deseado, etc.
' se supone que la funcin inputValor recoge un valor de algn
sitio
valor1 as integer = inputValor()
valor2 as integer = inputValor()
op as New IOperar = clasellamante
Return op.Operar(valor1,valor2) 'AQU es donde se utiliza el
polimorfismo.
End Function
End Class
' Declaramos 2 clases: Sumar y Restar que implementan la interfaz y
que llaman a la clase Operacion:
Class Sumar
Implements IOperar
Private Function Operar(valor1 as Integer, valor2 as Integer) as
Long Implements IOperar.Operar
Return valor1 + valor2
End Function
Function Calcular() as Long
op as New operacion
Return op.Calcular(Me) ' se est llamando a la funcin 'Calcular'
de la clase 'Operacin'
End Function
End Class
' segunda clase....

Class Restar
Implements IOperar
Private Function Operar(valor1 as Integer, valor2 as Integer) as
Long Implements IOperar.Operar
Return valor1 - valor2
End Function
Function Calcular() as Long
op as New operacion
Return op.Calcular(Me) ' se est llamando a la funcin 'Calcular'
de la clase 'Operacin'
End Function
End Class
Analicemos ahora el cdigo para entender el polimorfismo expuesto en la interfaz: La interfaz
expone un mtodo que puede ser implementado por las diferentes clases, normalmente
relacionadas entre si. Las clases Sumar y Restar implementan la interfaz pero el mtodo de la
interfaz lo declaramos privado para evitar ser accedido libremente y adems tienen un mtodo
llamado Calcularque llama a la clase Operacin donde tenemos otro mtodo con el mismo
nombre. Es esta clase ltima la que realiza el polimorfismo y debe fijarse como es a travs de
una instancia de la interfaz que llama al mtodo operar. La interfaz sabe a qu mtodo de qu
clase llamar desde el momento que asignamos un valor a la variable OP en el
mtodo Calcular de la clase Operacin, que a su vez recibi la referencia del
mtodo Calcular desde la clase que la llama, sea sta cual sea, se identifica a s misma,
mediante la referencia Me This segn el lenguaje empleado. Debe notarse que la instancia
de la interfaz accede a sus mtodos aunque en sus clases se hayan declarado privadas.

Diferencias entre polimorfismo y sobrecarga[editar]


El polimorfismo como se muestra en el ejemplo anterior, suele ser bastante ventajoso aplicado
desde las interfaces, ya que permite crear nuevos tipos sin necesidad de tocar las clases ya
existentes (imaginemos que deseamos aadir una clase Multiplicar), basta con recompilar
todo el cdigo que incluye los nuevos tipos aadidos. Si se hubiera recurrido a
la sobrecarga durante el diseo exigira retocar la clase anteriormente creada al aadir la
nueva operacin Multiplicar, lo que adems podra suponer revisar todo el cdigo donde se
instancia a la clase.

Un mtodo est sobrecargado si dentro de una clase existen dos o ms declaraciones


de dicho mtodo con el mismo nombre pero con parmetros distintos, por lo que no hay
que confundirlo con polimorfismo.

En definitiva: La sobrecarga se resuelve en tiempo de compilacin utilizando los


nombres de los mtodos y los tipos de sus parmetros; el polimorfismo se resuelve en
tiempo de ejecucin del programa, esto es, mientras se ejecuta, en funcin de la clase a la
que pertenece el objeto.

Qu es la abstraccin?
La abstraccin, una de las herramientas que ms nos ayuda a la hora de solucionar un problema,
es un mecanismo fundamental para la comprensin de problemas y fenmenos con una gran
cantidad de detalles, su idea principal consiste en manejar un problema, fenmeno, objeto, tema o

idea como un concepto general, sin considerar la gran cantidad de detalles que estos puedan
tener.
De modo general podemos decir que la abstraccin permite establecer un nivel jerrquico en el
estudio de los fenmenos, el cual se establece por niveles sucesivos de detalles. Generalmente, se
sigue un sentido descendente de detalles, desde los niveles ms generales a los niveles ms
concretos.

Por ejemplo: los lenguajes de programacin permiten al programador abstraerse del sin fin de
detalles del lenguaje de la computadora (ceros y unos). Otro ejemplo, la memoria de la
computadora es una estructura unidimensional formada por celdas y sin embargo trabajamos como
si fuera nica.
La abstraccin nos brinda la posibilidad de ir definiendo una serie de refinamientos sucesivos
refirindose a la estrategia que se utiliza para descomponer un problema en subproblemas.
Conforme evoluciona el diseo de software a cada nivel de mdulos se representa un refinamiento
en el nivel de abstraccin. Esto es, incluir detalles que fueron obviados en un nivel superior, en un
nivel ms bajo de la jerarqua.
En resumen la abstraccin oculta la forma en que pensamos al resolver un problema, presentado
solamente la parte general para resolverlo, si pudiramos entrar al cerebro de diferentes personas
al resolver un problema encontraramos muchas maneras para llegar a esa solucin, lo que nos
importa es la solucin sin entrar en tantos detalles.

Abstraccin

Objetivos: Explicar qu es el concepto de abstraccin en


computacin y como ayuda a resolver problemas complejos.
Temas:
El concepto de abstraccin.
Problemas tipo.

El concepto de abstraccin
La complejidad de un procedimiento es aproximadamente
proporcional a su tamao (nmero de lneas) multiplicado por el
nmero de variables que se declaran en l. Esto significa que la
complejidad de un procedimiento puede crecer rpidamente
hasta niveles inmanejables por una persona. A modo de
ejemplo, una solucin para la tarea 4 de este curso consiste en
un procedimiento de unas 50 lneas con 14 variables. Un
procedimiento con el doble de la lneas y el doble de variables
sera 4 veces ms complejo.
De hecho, pocas personas son capaces de manejar la complejidad de un
procedimiento de ms de 200 lneas. Esto se traduce en que a pesar de lograr
escribir el procedimiento, nunca se llega a hacerlo a andar correctamente (no se
logra eliminar todos los errores de programacin) Significa esto que existe un
cota para el tamao de los programas que puede escribir una persona?
Afortunadamente no. En la prctica esta cota existe para el tamao de los
procedimientos, pero no los programas. Se pueden escribir programas de
millones de lneas, en base a funciones o procedimientos de 20 a 50 lneas.
La clave para poder escribir programas complejos es descomponer el problema a
resolver en subproblemas ms pequeos y luego resolverlos en forma
independiente. Esto significa que hay que elegir uno de estos subproblemas y
programar una solucin de l abstrayndose completamente de los detalles sobre
como programar una solucin para el resto de los subproblemas. Luego, se elige
otro subproblema y se resuelve abstrayndose de los detalles de implementacin
del primer subproblema u otros subproblemas an no resueltos. As, hasta
resolver todos los subproblemas.
Diseo:
El proceso de descomposicin de un problema en partes ms simples se
denomina diseo. El diseo comienza con un problema que puede ser complejo
de resolver. Su resultado es un conjunto de subproblemas que constituyen las
partes del problema. Estas partes se pueden resolver independientemente unas de
otras.

Abstraccin:
La abstraccin es una estrategia de resolucin de problemas en la cual el
programador se concentra en resolver una parte del
problema ignorando completamente los detalles sobre cmo se resuelven el resto
de las partes. En este proceso de abstraccin se considera que el resto de las
partes ya han sido resueltas y por lo tanto pueden servir de apoyo para resolver la
parte que recibe la atencin.
Una vez hecha la descomposicin en subproblemas, resulta natural resolver cada
uno de ellos en una funcin o un procedimiento. Como los subproblemas son ms
sencillos que el problema original, su complejidad (dada por su tamao y nmero
de variables) ser inferior a la complejidad del mismo problema resuelto por
medio de un solo procedimiento.
La abstraccin es la estrategia de programacin ms importante en computacin.
Sin abstraccin las personas seran incapaces de abordar los problemas
complejos. La pericia de un programador no est en ser veloz para escribir lneas
de programa, si no que en saber descubrir, en el proceso de diseo, cules son las
partes del problema, y luego resolver cada una de ellas abstrayndose de las
otras.
Un ejemplo de abstraccin es el hecho de que uno pueda conducir un automvil
sin ser un mecnico (lo cual probablemente no era cierto con los primeros
vehculos). Al conducir, uno se abstrae de cmo funciona la combustin en el
motor. Slo se requiere saber cmo se maneja el volante y los pedales, y cuales
son las reglas del trnsito.
Ejemplo:
Supongamos que se necesita un programa que calcule los impuestos que deben
pagar un grupo de personas. El impuesto vara de acuerdo al sueldo que percibe
cada persona. Para ello se establecen varios tramos de sueldo. Estos tramos se
encuentran en un archivo de nombre impuestos.txt. Su contenido podra ser por
ejemplo:
10000
2000
500

30
20
10

El primer campo (columnas 0 a 9 ) es el monto de sueldo y el


segundo (columnas 10 a 15) es la tasa de impuestos que debe
pagar una persona por cada peso que perciba por sobre ese
sueldo. Es as como una persona que gane 5000, percibe 3000
pesos por sobre el tramo 2000 y por lo tanto debe pagar el 20%
de 3000. Adems percibe 1500 pesos por sobre los 500 por lo
que debe pagar el 10% de 1500. Por lo tanto esa persona debe
pagar 750 pesos en impuestos.
Solucin:
Este problema lo podemos resolver con un solo procedimiento, pero el programa
resultante ser menos complejo si descomponemos el problema en 2
subproblemas y luego resolvemos ambos subproblemas en forma independiente.
1er. problema: dados un arreglo con los lmites de sueldo de cada tramo, un
arreglo que contiene las tasas de impuesto que corresponde pagar en cada tramo y
un sueldo, calcular el monto a pagar en impuestos por ese sueldo.
2do. problema: construir dos arreglos con los valores contenidos en el
archivo impuestos.txt y luego establecer un dilogo para pedir sucesivamente
varios sueldos y responder cuanto se debe pagar por cada uno de ellos,
suponiendo que existe una funcin que calcula el impuesto a partir de los dos
arreglos y el sueldo.
La idea es resolver cada uno de estos problemas en una funcin o un
procedimiento independiente. El primero se puede resolver definiendo una
funcin impuestos que reciba como parmetros los dos arreglos y el sueldo, y
entregue como resultado el impuesto a pagar. Esta funcin tendr la siguiente
forma:
int impuestos(Array tramos, Array tasas, int sueldo) {
... calcular el impuesto en funcin de tramos, tasas y sueldo ...
return el impuesto calculado
}

Al resolver este subproblema, el programador debe abstraerse


de que los tramos estn en un archivo y que hay que realizar un
dilogo con el usuario, porque estos detalles son parte del 2do

problema. Tampoco debe preocuparse de cmo se construyen


los arreglos. Ellos son parmetros del problema.
El segundo problema es resuelto en el procedimiento run(). En l se lee el
archivo, se construyen los arreglos, se dialoga con el usuario y se invoca la
funcin impuestos. La forma del cdigo ser entonces:
void run() {
- tramos= new Array(...);
- tasas= new Array(...);
- Inicializar ambos arreglos con los valores ledos del archivo
impuestos.txt
- Hacer un ciclo de dilogo con el usuario
- Por cada sueldo ingresado por el usuario
se invoca la funcin impuestos:
monto= impuestos(tramos, tasas, sueldo);
- desplegar monto.
}

Al resolver este subproblema, el programador se abstrae acerca


del detalle de cmo se calcula el impuesto, porque esto es parte
del primer subproblema.
El beneficio que trae la abstraccin consiste en que resolver estos dos
subproblemas en forma independiente resulta menos complejo que resolver el
problema original considerando todos sus detalles en forma simultnea.
Conclusin: resulta conveniente descomponer un problema en subproblemas
simples de resolver, porque la suma de las complejidades de las partes es menor
que la complejidad del todo. Mientras ms grande es el programa final, mayor
ser la diferencia en complejidad.
En el ejemplo anterior, cada uno de los subproblemas se resolvi por medio de
una funcin o procedimiento. Esta es la forma de resolver los problemas en los
lenguajes tradicionales (Pascal, C, Visual Basic y otros). En los lenguajes
orientados a objetos (Java, C++, Smalltalk y otros) tambin existe la posibilidad
de resolver cada uno de los subproblemas en clases.

Problemas tipo
Aprender a descomponer convenientemente un problema en sus
partes toma bastante tiempo. No elegir adecuadamente las

partes puede originar un problema que es an ms difcil que el


original. Por esta razn, en este curso en la mayora de los
problemas la descomposicin de los problemas est dada en el
enunciado.
Los tpicos problemas que Ud. ver en los controles, tareas y ejercicios sern:
Problemas de uso de funciones: Se enuncia cul es el
problema que resuelven una o ms funciones (o
procedimientos). Se indica el tipo de los parmetros que
reciben y el del valor retornado. Se presenta adems un
problema complejo no resuelto. Ud. debe resolver el
problema complejo usando (invocando) las funciones
dadas, abstrayndose de cmo estn implementadas.
Ejemplo: a lo largo del curso se han usado funciones y procedimientos
como sqrt, print, max, sin saber cmo estn implementadas.
Problemas de definicin de funciones: Se enuncia cul es el
problema que debe resolver una funcin (o procedimiento).
Ud. debe definirla, es decir implementar esta funcin. Debe
tener especial cuidado en identificar cul es el nmero y
tipo de los parmetros que recibe la funcin, y el tipo del
resultado (void si es un procedimiento).
Ejemplo: escribir la funcin que calcula el mximo valor en un arreglo.
Problemas completos: Una combinacin de los dos
problemas anteriores. Se plantea un problema complejo. Se
pide que Ud. defina una funcin que resuelve un
subproblema. Ud. la implementa abstrayndose del
problema ms complejo. Luego resuelve el problema
complejo en trminos de esta funcin.
Ejemplo: desplegar los nmeros primos entre 200 y 300.
Problemas de uso de objetos: Se enuncia el problema que
resuelve una clase de objetos (como Fecha). Ud. debe
resolver un problema complejo usando objetos de esa
clase, abstrayndose de cmo est implementada la clase.

Ms adelante se preguntarn problemas de definicin de clase y


problemas completos acerca de clases.

Introduccin.
Visual Basic es uno de los tantos lenguajes de programacin que podemos encontrar hoy en da.
Dicho lenguaje nace del BASIC (Beginners All-purpose Symbolic Instruction Code) que fue creado en su
versin original en el Dartmouth College, con el propsito de servir a aquellas personas que estaban
interesadas en iniciarse en algn lenguaje de programacin. Luego de sufrir varias modificaciones, en el ao
1978 se estableci el BASIC estndar. La sencillez del lenguaje gan el desprecio de los programadores
avanzados por considerarlo "un lenguaje para principiantes".
Primero fue GW-BASIC, luego se transform en QuickBASIC y actualmente se lo conoce como Visual Basic y
la versin ms reciente es la 6 que se incluye en el paquete Visual Studio 6 de Microsoft. Esta versin
combina la sencillez del BASIC con un poderoso lenguaje de programacin Visual que juntos permiten
desarrollar robustos programas de 32 bits para Windows. Esta fusin de sencillez y la esttica permiti
ampliar mucho ms el monopolio de Microsoft, ya que el lenguaje slo es compatible con Windows,
un sistema operativo de la misma empresa.
Visual Basic ya no es ms "un lenguaje para principiantes" sino que es una perfecta alternativa para los
programadores de cualquier nivel que deseen desarrollar aplicaciones compatibles con Windows.
En este informe explicaremos algunos trminos y/o caractersticas de mismo con la finalidad de aprender mas
sobre este Programa y manejarlo con facilidad
1.

1.

De los fundamentos de programacin explique:

2.

Es un lenguaje de programacin que se ha diseado para facilitar el desarrollo de aplicaciones en un


entorno grafico (GUI-GRAPHICAL USER INTERFACE) Como Windows 98, Windows NT o superior.
Qu es Visual Basic?

3.

Diseador de entorno de datos: Es posible generar, de manera automtica, conectividad entre controles y
datos mediante la accin de arrastrar y colocar sobre formularios o informes.
Los Objetos Actives son una nueva tecnologa de acceso a datos mediante la accin de arrastrar y
colocar sobre formularios o informes.
Asistente para formularios: Sirve para generar de manera automtica formularios que
administran registros de tablas o consultas pertenecientes a una base de datos, hoja de calculo u objeto
(ADO-ACTIVE DATA OBJECT)
Asistente para barras de herramientas es factible incluir barras de herramientas es factible incluir barra de
herramientas personalizada, donde el usuario selecciona los botones que desea visualizar durante la
ejecucin.
En las aplicaciones HTML: Se combinan instrucciones de Visual Basic con cdigo HTML para controlar
los eventos que se realizan con frecuencia en una pagina web.
La Ventana de Vista de datos proporciona acceso a la estructura de una base de datos. Desde esta
tambin acceso al Diseador de Consultas y diseador de Base de datos para administrar y registros.
Caractersticas de Visual Basic.
Barra de titulo: muestra el nombre del proyecto y del formulario q se est diseando actualmente
Barra de mens: agrupa los mens despegables que contienes todas las operaciones que pueden
llevarse a cabo con Visual Basic 6.0.

Barra de herramientas estndar: contienen los botones que se utilizan con mayor frecuencia cuando se
trabaja con un proyecto. Simplifica la eleccin de opciones de los mens Archivo, Edicin, Ver y Ejecutar;
adems, en el rea derecha presenta la ubicacin (coordenadas) y el tamao del objeto seleccionado
Ventana de formulario: es el rea donde se disea la interfaz grfica, es decir, es donde se inserta
electo grficos, como botones, imgenes, casilla de verificacin, cuadros de listas, etc.
Cuadro de herramientas: presenta todos los controles necesarios para disear una aplicacin, como
cuadros de texto, etiquetas, cuadros de listas, botones de comandos, etc.

Leer ms: http://www.monografias.com/trabajos10/visual/visual.shtml#ixzz3dcI9u0tb

Ventana de proyecto: muestra los elementos involucrados en el proyecto, como formularios, mdulos,
controles oxc, etc. Cada elemento puede seleccionarse en forma independiente para su edicin.
Ventana de posicin del formulario: muestra la ubicacin que tendr el formulario en la pantalla, cuando
ejecute la aplicacin. Esta ubicacin puede cambiarse si se hace clic con el botn izquierdo del mouse.
La Ventana propiedades muestra todas las propiedades del control actualmente seleccionado, en este caso
muestra las propiedades del Form1, luego podemos ver que abajo dice "Form1 Form", lo que est en negrita
es el nombre del objeto, y lo que le sigue es el tipo de objeto, en este caso es un Formulario (Form)

Mencione y Explique las partes del entorno de Visual Basic.


Mencione y Explique los botones de la barra de herramientas de Visual Basic.
TextBox

Mediante este control podremos realizar tanto la entrada como la salida de datos en nuestras aplicaciones.
No hace falta que indiquemos las coordenadas de la situacin del formulario en pantalla, simplemente
tendremos que marcar sobre el control de la caja de herramientas y dibujarlo con el tamao que queramos en
nuestro formulario
Label

Este control es tambin uno de los ms utilizados, aunque su utilidad queda restringida a la visualizacin de
datos en el mismo, no permitiendo la introduccin de datos por parte del usuario.
CommandButton

Este control es el tpico botn que aparece en todas las aplicaciones y que al hacer click sobre l nos permite
realizar alguna operacin concreta, normalmente Aceptar o Cancelar. Aunque segn el cdigo que le
asociemos podremos realizar las operaciones que queramos.
OptionButton

Este control nos permite elegir una opcin entre varias de las que se nos plantean. Cada opcin ser un
control optionbutton diferente.
Bloquear los Controles

Cuando estn situados los controles en el formulario se pueden bloquear para que no puedan moverse de
forma accidental.
Para esto deberemos pulsar en la barra de herramientas:

Cuando actives este botn y mientras no desbloquees los controles utilizando la misma opcin no se podrn
mover ninguno de los controles del formulario activo.
Sin embargo en si abres otro formulario que no tenga los controles bloqueados si se podrn mover. Si aades
ms controles a un formulario bloqueado estos quedan bloqueados automticamente

Tiene la siguiente forma:

Un control Frame proporciona un agrupamiento identificable para controles. Tambin puede utilizar un Frame
para subdividir un formulario funcionalmente por ejemplo, para separar grupos de controles OptionButton.
CHECK BUTTON Y OPTION BUTTON (BOTONES DE ELECCION Y OPCION)
Se obtienen directamente de la caja de herramientas.

Dada la similitud de ambos controles, se comentan conjuntamente.


El control CheckBox, o casilla de verificacin, permite elegir una opcin (activada / desactivada, True/False)
que el usuario puede establecer o anular haciendo click. Una X en una casilla de verificacin indica que est
seleccionada, activada, o con valor True. Cada casilla de verificacin es independiente de las dems que
puedan existir en el formulario, pudiendo tomar cada una de ellas el valor True o False, a voluntad del
operador.
Un control OptionButton muestra una opcin que se puede activar o desactivar, pero con dependencia
del estado de otros controles OptionButton que existan en el formulario.
Generalmente, los controles OptionButton se utilizan en un grupo de opciones para mostrar opciones de las
cuales el usuario slo puede seleccionar una. Los controles OptionButton se agrupan dibujndolos dentro de
un contenedor como un control Frame, un control PictureBox o un formulario. Para agrupar controles

OptionButton en un Frame o PictureBox, dibuje en primer lugar el Frame o PictureBox y, a continuacin, dibuje
dentro los controles OptionButton. Todos los controles OptionButton que estn dentro del mismo contenedor
actan como un solo grupo, e independientes de los controles OptionButton de otros grupos distintos.
Aunque puede parecer que los controles OptionButton y CheckBox funcionan de forma similar, hay una
diferencia importante: Cuando un usuario selecciona un OptionButton, los otros controles del mismo grupo
OptionButton dejan de estas disponibles automticamente. Por contraste, se puede seleccionar cualquier
nmero de controles CheckBox.
LIST BOX Y COMBO BOX
Estos dos controles, debido a su similitud, se estudian conjuntamente.
Se obtienen directamente de la caja de herramientas:

Un control ListBox muestra una lista de elementos en la que el usuario puede seleccionar uno o ms. Si el
nmero de elementos supera el nmero que puede mostrarse, se agregar automticamente una barra de
desplazamiento al control ListBox.
Un control ComboBox combina las caractersticas de un control TextBox y un control ListBox. Los usuarios
pueden introducir informacin en la parte del cuadro de texto y seleccionar un elemento en la parte de cuadro
de lista del control. En resumen, un ComboBox es la combinacin de un ListBox, que se comporta como si de
un ListBox se tratase, y de un TextBox, con comportamiento anlogo a un TextBox sencillo, con la
particularidad aqu de que el texto se le puede introducir por teclado, o elegir uno de los que figuran en la
parte ListBox del Combo.
CONTROLES HScrollBar y VScrollBar
Son dos controles similares, para introducir un dato cuasi-analgico en una aplicacin. Se toman directamente
de la caja de herramientas, y tienen un aspecto parecido al de un control de volumen de un equipo de msica.
El HScrollBar est en posicin horizontal, y el VScrollBar en posicin vertical.

Mediante estos controles se pueden introducir datos variando la posicin del cursor.
TIMER TEMPORIZADOR
Este objeto permite establecer temporizaciones. Presenta una novedad respecto a los controles estudiados
hasta ahora. El control Timer solamente se ve durante el tiempo de diseo. En tiempo de ejecucin, el control
permanece invisible.
La temporizacin producida por el Timer es independiente de la velocidad de trabajo del ordenador. (Casi
independiente. El timer no es un reloj exacto, pero se le parece)
Se toma directamente de la caja de herramientas, y tiene el aspecto siguiente:

SHAPE
Se toma directamente de la caja de herramientas:

Shape es un control grfico que se muestra como un rectngulo, un cuadrado, una elipse, un crculo, un
rectngulo redondeado o un cuadrado redondeado.
Utilice controles Shape en tiempo de diseo en lugar o adems de invocar los mtodos Circle y Line en
tiempo de ejecucin. Puede dibujar un control Shape en un contenedor, pero no puede actuar como
contenedor. (Esto quiere decir que un control Shape nunca le servir, por ejemplo, para albergar varios
OptionButton y pretender que sean independientes de otros controles OptionButton que se encuentren fuera
del control Shape.
Este control no tiene Procedimientos. En realidad, solamente sirve para mostrar un determinado grfico,
envolver grficamente a otros controles, pero no tiene ninguna aplicacin en cuanto a programa. Es un
"adorno" para sus aplicaciones.
LINE
Se toma directamente de la caja de herramientas

Line, al igual que Shape, es un control grfico que solamente sirve para poner una lnea en un formulario. Del
mismo modo, no tiene procedimientos, por lo que no sirve para aportar cdigo al programa. Solo sirve para
aportar una caracterstica grfica, es un adorno.
CONTROL GAUGE
Este control presenta una informacin numrica de forma grfica, bien como un display lineal (tpico por
ejemplo en ecualizadores de audio), o como una aguja. No est normalmente en la caja de herramientas, por
lo que hay que traerla desde los Controles Personalizados (Men desplegable de Herramientas) Se denomina
MicroHelp Gauge Control. El archivo que lo contiene se denomina GAUGE16.OCX, 16 bits

Mediante este control, podemos presentar una magnitud numrica de una forma cuasi-analgica. Podramos
decir que es un control similar al HScrollBar, que en vez de meter informacin a la aplicacin, la presenta.
Este control puede servir, por ejemplo, para presentar el tanto por ciento de ejecucin de una tarea, como
elemento tranquilizante. Puede presentar el nivel de un depsito de agua, etc.
Presenta las dos formas siguientes:

En la figura puede verse un Gauge de aguja, uno de barra horizontal y otro de barra vertical. Para mejorar la
presentacin, el Gauge permite poner un grfico como fondo, cambiar el color de la barra, color de fondo, etc.
El control Gauge crea medidores definidos por el usuario, que puede elegir entre los estilos lineales (relleno) o
de aguja.
Nota para la distribucin Cuando cree y distribuya aplicaciones con controles Gauge, tendr que instalar el
archivo apropiado en el subdirectorio SYSTEM de Windows del cliente. El Kit para instalacin que
incluye Visual Basic, le proporciona herramientas para escribir los programas que instalan las aplicaciones
correctamente.
El CommonDialog es un control del que se libran muy pocas aplicaciones. Dada la importancia de este
control, se le dedica un capitulo nico en esta Gua del Estudiante.
CUADRO DE DIALOGO CommonDialog
Normalmente se encuentra en la caja de herramientas

Este control no se presenta en tiempo de diseo mas que con un simple icono:

El cuadro de dilogo, CommonDialog se utiliza para varias funciones:


Abrir Ficheros
Guardar Ficheros
Elegir colores
Seleccionar Impresora

Seleccionar Fuentes

Mostrar el fichero de Ayuda


En realidad el cuadro de dilogo permite conocer datos con los cuales, y mediante el cdigo adecuado,
abriremos o guardaremos ficheros, elegiremos colores o seleccionaremos fuentes. Es decir, el CommonDialog
NO realiza mas funciones que mostrar ficheros existentes, fuentes disponibles, colores, para que, mediante
cdigo, abramos esos ficheros o usemos una determinada fuente.
Dependiendo de la aplicacin para la que vaya a usarse se deber activar de distintas formas. Si el cuadro de
dilogo se va a usar para seleccionar la impresora y para otras aplicaciones, es recomendable usar uno
exclusivamente para seleccionar la impresora.
Esta ltima recomendacin se debe a que, para el control de la impresora, el CommonDialog SI realiza las
funciones de seleccin de impresora predeterminada. Esta diferencia operativa hace que si usamos el mismo
CommonDialog para seleccionar impresora y abrir ficheros, por ejemplo, se "cuelgue" el CommonDialog.
5.
Defina los siguientes trminos.
6.

7.

Eventos: es una accin como hacer clic, doble clic, presionar una tecla, mover el puntero del
mouse, etc. Que el usuario debe realizar para que un objeto ejecute una accin determinada cada control
responde a diferentes eventos, algunos de ellos tienen caractersticas comunes. Los eventos pueden
Visualizarse en la ventana de cdigo.
Mtodos: Son procedimientos definidos en Visual Basic para realizar operaciones especificas sobre los
objetos (Controles o Formularios)
Controles: Son los objetos que conforman la interfaz grafica de un programa;
a travs de ellos, un usuario interacta con la aplicacin. Sus caractersticas
pueden cambiarse por medio de la ventana propiedades
Proyecto:
Propiedades: Son los datos que hacen referencia a un objeto o formulario.
Ejemplo : Color de fondo del formulario, Fuente de texto de un TextBox.
Objetos: Un objeto es una entidad que tiene asociado un conjunto de mtodos, eventos y propiedades.
Hay muchas clases de objetos, y por tanto, puede llegar a haber tantos mtodos, eventos y propiedades
distintas como objetos diferentes.
Ejemplo : Una caja de texto (TextBox) en la cual podemos escribir cualquier lnea es un objeto.
Clases: Una clase no es nada mas que un Objeto, este objeto, tiene propiedades, funciones y
mtodos. Para empezar ahora la creacin de propiedades si se utiliza Property Let y Property Get; la
diferencia es casi nada, inclusive podra decir que una clase en visual basic, es casi lo mismo que un
control, pero ahora nace una nueva pregunta, cuando utilizar un control y cuando utilizar una clase, bueno
la opinin que voy a dar es desde mi perspectiva.
Mdulo: Un proyecto Visual Basic no slo est compuesto de Formularios, sino tambin de lo que se
denominan mdulos.
Un mdulo es un fichero Visual Basic donde escribimos parte del cdigo de nuestro programa, y digo
parte, porque puede haber cdigo en el formulario tambin.
De los fundamentos de programacin explique:

Mdulos de Control:
Mdulos de Formularios:
Mdulos de Clases
Mdulos Estndar
Editor de Cdigos:
Variable: Dim: Al declarar una variable con esta palabra estamos diciendo que la variable sea local al
mbito en que se declara. Puede ser dentro de un procedimiento o dentro de un formulario, de esta forma no
sera accesible desde los dems procedimientos o formularios.

Public: Las variables declaradas sern publicas y podrn estar accesibles desde todos los formularios de la
aplicacin. Para conseguirlo tendremos que declararlas en un mdulo de cdigo, no en la seccin declarations
de cualquier formulario de los que conste la aplicacin. Para crear un mdulo de cdigo en el men principal
de Visual Basic marcamos en INSERT/MODULE y aparecer junto a los dems formularios de la ventana de
proyecto aunque con un icono distinto indicando que se trata de un mdulo de cdigo.
Static: Con esta forma de declarar variables conseguiremos que las variables locales no se creen y se
destruyan al entrar y salir de los procedimientos donde fueron declaradas sino que se mantenga su valor
durante todo el periodo de ejecucin de la aplicacin. De esta forma a entrar en algn procedimiento las
variables recuerdan el valor que tenan cuando se sali de l.
TIPOS DE VARIABLES
TIPO
BOOLEAN
BYTE
INTEGER
LONG
SINGLE
DOUBLE
CURRENCY
STRING
DATE
Constante: Declaracin de constantes que pueden ser usadas en cualquier punto en lugar de su valor,
permitiendo cambiarlo cuando sea necesario, sin tener que cambiarlo en todos los sitios en que se utiliza. La
expresin no puede utilizar llamadas a funciones, pues la constante se calcula en tiempo de compilacin, no
en tiempo de ejecucin.

Leer ms: http://www.monografias.com/trabajos10/visual/visual2.shtml#ixzz3dcJTCF8Z

Das könnte Ihnen auch gefallen