05 agosto 2008

Paradigmas de Programación y muchos objetos en C++

En este mensaje, voy a comenzar a hablar un poco acerca de la programación orientada a objetos y voy a ejemplificar lo que voy describiendo con el lenguaje C++.  Espero que encuentren esto de utilidad y si hay alguna duda, queja sugerencia o lo que sea, déjenme un comentario e intentaré responer en cuanto pueda.
Paradigmas de programación
Antes que nada, vamos familiarizándonos con diferentes paradigmas de programación (palabra dominguera para decir que son diferentes maneras de representar y manipular datos).

Existen varios paradigmas y todos tienen una manera diferente de resolver problemas.  Aquí pongo unos cuantos con un resumen de su filosofía:
  • El paradigma imperativo es considerado el más común y está representado, por ejemplo, por el C o por BASIC.  Aquí los programas se ejecutan de manera lineal, una instrucción a la vez, línea por línea, siempre en el mismo orden.
  • El paradigma funcional está representado por la familia de lenguajes LISP.  Aquí todos los programas son un montón de funciones anidadas.
  • El paradigma lógico, un ejemplo es PROLOG.
  • El paradigma orientado a objetos. Un lenguaje completamente orientado a objetos es Smalltalk.  Aquí todo el programa de compone de objetos, los cuales contienen procedimientos y datos.
También hay algunos lenguajes que mezclan paradigmas.  Por ejemplo, C++, Java y Visual Basic combinan el paradigma imperativo y el orientado a objetos.

Vista Preeliminar de OOP
Ya que hemos hablado tantito acerca de los diferentes paradigmas de programación, es hora de ver que onda con la Programación Orientada a Objetos (abreviado como POO [por sus siglas en español] o OOP [por sus siglas en inglés: Object Oriented Programming]) enfocada a C++.

¿Y qué "¡#¿$!? es un objeto?
De una manera chipocluda, podemos decir que un objeto es un principio de alto nivel, un concepto que nos permite organizar software.  Precisamente de aquí sacamos la palabrita de "programación orientada a objetos".

De una manera más real, podemos decir que un objeto es una región de almacenamiento dentro de un programa ejecutable que obedece un conjunto de reglas definidas por el usuario, o sea que es una estructura que guarda datos y contiene funciones para manipular esos datos.  Tomemos como ejemplo un arreglo.  En teoría, el programador tuvo que pensar en qué características serían necesarias en ese objeto arreglo; y a cada arreglo declarado en un programa ejecutable se le llama objeto.  También se conoce a un objeto en memoria como una "instancia".

Esto sonó muy bonito, pero son un par de conceptos que en la práctica no nos sirven de nada.  Hasta ahora he descrito a los objetos como regiones de memoria.  Es claro que conozcamos objetos (un vaso, una ventana, un carro, etc.), pero todavía no se entiende muy bien que característica de un lenguaje de programación nos permite especificar y crear objetos.  Para esto hacemos una "clase", que en la mayoría de lenguajes de programación OO incluyendo al C++, es un tipo de dato definido por el usuario para crear objetos.  Clases son como los planos de una casa: especifican exactamente como debe de construirse el objeto y como se va a comportar.

¿Y cómo uso las clases?
La definición de una clase especifica los datos y funciones miembros de esa clase.  Por ejemplo, consideremos una clase llamado VerArch que tiene un dato miembro llamado fin.  Si tenemos un objeto VerArch llamado oVA, podemos accesar al dato miembro fin usando la notación normal de C++:

if (oVA.fin == NULL)
   ...

Ya estuvo bueno de datos pero, ¿y si necesito funciones?  Supongamos que la clase VerArch usada anteriormente tiene una función llamada AddLine() (luego llego a la parte de como declarar/hacer la función miembro).  Para el objeto VerArch llamado oVA podemos llamar a la función AddLine() así:

oVA.AddLine();

oVA es el nombre del objeto, el punto significa "miembro de", AddLine es el nombre de la función miembro y los paréntesis son indicadores estándares de C++ y Java.

Lo mejorcito de los objetos...

Los 3 conceptos más importantes en programación OO son la abstracción (también conocido como encapsulamiento), la herencia y el polimorfismo.  Yo casi diría que en estos 3 conceptos radica la ventaja de los lenguajes OO.  Luego vemos de que trata cada uno, pero antes un poco de rollo...

En la programación OO (desde ahora la voy a abreviar como OOP), diseñamos software usando partes componentes, a los que llamamos "objetos".  Los objetos se conforman de datos miembro y un conjunto de rutinas para manipular los datos, a los que llamamos funciones miembro.  Pero el tener a las funciones "pegadas" a los datos es solo una ventaja.  Como diría Raúl Velasco, aún hay más...

Por ejemplo, los objetos físicos (como tu teclado o un carro) tienen una interfase externa que esconden su complejidad interna (por ejemplo: no tienes que saber exactamente como funciona un motor de combustión interna para poder manejar un carro).  El esconder información se llama abstracción o encapsulación.  Esto facilita las cosas: imagínate que un arquitecto tenga que dibujar como va a funcionar el sistema de agua caliente a una casa.  Le sería complicado.  Mejor solo dibuja en los planos lo que es necesario para poner el boiler, tubería, etc. sin preocuparse como funciona.  Sabe que funciona y con eso basta.

Otro aspecto de objetos físicos que se extienden a la OOP es la forma en que algunos objetos pueden ser adaptados para crear nuevos objetos.  En OOP a esto lo llaman herencia y decimos que un objeto se deriva de otro.  Volvamos a nuestro arquitecto frustrado: puede modificar los planos de una casa para incluir una cochera para 2 autos y un desayunador.  Estas cosas que se agregan requieren un ajuste a los planos de piso y de ventanas, pero el diseño básico de la casa queda igual.

Y una tercera característica de objetos físicos que agarramos es que diferentes objetos muchas veces operan en la misma manera.  En OOP eso se llama polimorfismo.  Piensa en vehículos con motores de combustión interna, desde el volcho (Volkswagen Sedan) hasta tráileres grandes.  Todos se operan con un pedal para la gasolina, otro para el freno y un volante.  En este rango de vehículos se usan mecanismos muy diferentes para algunas cosas como son frenos o cambios de velocidades.  Pero en todos los casos el pedal del freno es una interfase uniforme para el mecanismo interno.

Usando Clases
Después de esto, como diría el dermatólogo, vámonos directo al grano.  Vamos a usar las clases y crear objetos.

La sintaxis básica de una clase en C++ sería así (sé que hay muchos otros tiliches que se le pueden poner, pero eso lo hablaremos más adelante):

class Nombre_Clase
{
   public:
      // declaración de los miembros públicos
   private:
      // declaración de los miembros privados
}

Al ver esto, probablemente tu primera pregunta es ¿qué es un miembro público?  Y el segundo probablemente sería ¿y qué es un miembro privado?  La onda está así, en la sección public se define las partes (funciones y variables) de la clase que son accesibles a todos y se declaran las funciones miembro que pertenecen a esta clase.  En la sección private se especifican los datos miembros de la clase.  Los usuarios no tienen acceso a esta parte.

Hagan de cuenta que las clases son como el edificio del restaurante con dos puertas.  Todo el mundo puede entrar por la puerta principal (sección public) y solo los empleados pueden entrar por una puerta pequeña que está en la parte posterior del edificio.  Esta sería una puerta que solo pueden acceder los empleados (miembros) del restaurante.

Este sería un ejemplo de una clase que guarda datos acerca de un video:

// video.h
class Video
{
   public:
      Video();
      void establecer(char *,char *,int);
      char* obtener_nombre();
      char* obtener_productor();
      int obtener_cantidad();
   private:
      char nombre[40]
      char productor[40];
      int cantidad;
}

Esta clase se llama Video (class Video) y tiene 3 datos privados (lo que está después de la línea private): nombre, productor y cantidad.  No conforme con esto, también contiene 5 funciones públicas (todo lo que viene después de public: y antes de private:), es decir, Video, establecer, obtener_nombre, obtener_productor y obtener_cantidad.

Referencias
Bibliografía (libros que tienen material interesante)
  • Desarrollo de proyectos con programación orientada a objetos con C++, de Jo Ann Smith, Editorial Thompson, ISBN: 970-686-091-6
  • Borland C++ Techniques & Utilities, de Kaare Christian, Editorial ZD Press, ISBN: 1-56276-054-8
Webografía (es medio contradictorio decir “bibliografía en la web”)
Si te interesan estos libros, aquí hay unas ligas donde los puedes conseguir:


¡Hasta la próxima!

15 comentarios:

Anónimo dijo...

muy bueno pero falta algo mas tutorial para entender mejor las clases

Anónimo dijo...

dado existen varios paradigmas para los lenguajes.
como usted lo dice los objetos son funciones k realizan una accion k nosotros les demos.

eso de los objetos es como el proyecto k en un semestre hicimos en visual no k nos dejo primero hacer lo de twitter y despues le fuimos agregando k siguiera a alguien y luego k imprimiera vrd a eso se refiere con abstracción o encapsulación.

lo de las clases eso lo pde entender +- no del todo bien dado k las clases de walter nos on eficioentes pero si capto lo k kiere decir con el public y el private

bueno tendremos k hacerlo en laboratorio para entender un poco mejor

soy Hector ontiveros 5TPO

5°TPO Edgar Leonel Peña Rodriguez dijo...

Edgar Leonel Peña Rodríguez
5°TPO

Este tema está basado en la programación orientada a objetos (C++).

Lo primero es especificar los paradigmas (diferente manera de controlar datos).Existen varios tipos los cuales ya hemos usado para resolver varios problemas. Estos paradigmas son:

• El paradigma imperativo es considerado el más común y está representado, por ejemplo, por el C o por BASIC. Aquí los programas se ejecutan de manera lineal, una instrucción a la vez, línea por línea, siempre en el mismo orden.

• El paradigma funcional está representado por la familia de lenguajes LISP. Aquí todos los programas son un montón de funciones anidadas.

• El paradigma lógico, un ejemplo es PROLOG.

• El paradigma orientado a objetos. Un lenguaje completamente orientado a objetos es Smalltalk. Aquí todo el programa de compone de objetos, los cuales contienen procedimientos y datos
.
Un objeto en programación es una región de almacenamiento dentro de un programa que ejecuta una serie de instrucciones y reglas dadas por el usuario.

Para crear y especificar los objetos en programación usamos las clases, que es un tipo de dato definido por el usuario para crear objetos.

En la programación orientada a objetos diseñamos software usando partes componentes, a los que llamamos objetos. Los objetos se conforman de datos miembro y un conjunto de rutinas para controlar los datos, a los que llamamos funciones miembro.

Los 3 conceptos más importantes en programación orientada a objetos son la abstracción la herencia y el polimorfismo.

La abstracción es ocultar la información, esto con la finalidad de no complicar al usuario ya que solo muestra el resultado sabiendo que funciona y no especificando el cómo funciona.

La herencia es un objeto que se deriva de otro, ya que podemos adaptar objetos para crear otros objetos.

El polimorfismo (poli = muchos, morfo = forma) es como quien dice diferentes objetos que tienen la misma funcionalidad.

Cesar Peraza 5 TPO dijo...

PARADIGMAS DE PROGRAMACION Y MUCHOS OBJETOS EN C++:
Paradigma Imperativo: Es el mas común y esta representado por C o BASIC, aquí se ejecuta de manera lineal los programas uno a la vez siguiendo un orden.
Paradigma Funcional: Es el representado por la familia de lenguajes LISP, aquí todos son un monton de funciones añadidas.
Paradigma Logico: PROLOG.
Paradigma orientado a objetos: Como Smaltalk, este es compuesto completamente por objetos.
Existen lenguajes que mezclan paradigmas.
Un objeto es un concepto que nos permite organizar software. Es una region de almacenamiento dentro de un ejecutable que obedece reglas osea que es un peon.
Existen 3 conceptos importantes en programación: herencia, abstaccion y polimorfismo.
Abstraccion es ocultar la info. Y lo muestra como prueba de ke mola.
Herencia es un objeto que se deriva de otro como hijo y apa.
El polimorfismo son muchos iguales por dentro no en su exterior, como almas gemelas.

Anónimo dijo...

tony hola
profe la verdad no le entendi a la clase peor pues conforme a lo que lei medio entendi esto aver si me lo pusiera explicar despues:

existen varios paradigmas para los lenguajes
los objetos son funciones que realizan una accion que nosotros les hacemos hacer .
El paradigma imperativo es el más común
El paradigma funcional está representado por la familia de lenguajes LISP

La abstracción es ocultar información

La herencia es un objeto que se deriva de otro

isaac monroy 5tpo

Anónimo dijo...

paradigmas de programacion y muchos objetos mas en C++

UN OBJETO es la forma en que nos permite organizar software

Este tema habla sobre la forma en que trabaja C++
los paradigmas de la programacion que son la forma de
manipular datos existen varios y todos tienen distintas
maneras de resolverse

IMPERATIVO; es el mas comun y se representa por C o BASIC
se ejecutan de manera lineal

FUNCIONAL;representado por la familia de lenguajes LISP
que vienen siendo muchas funciones seguidas en conjunto
anidadas

LOGICO; PROLOG

ORIENTADO A OBJETOS;todo el progama se como de objetos
los cuales son con procedimientos y datos

existen lenguajes que mezclan paradigmas como C++ Y JAVA

UN OBJETO es la forma en que nos permite organizar software

carlos espinosa 5tpo

Anónimo dijo...

Paradigmas de la Programacion

Para todo programador entender el simbolismo de como el lenguaje interprentara los datos que va que operar, es el punto de partida para regocirjarse y manosear la victoria de un programa exitoso :)

Asi nacen los dogmas paradigmaticos de la progamacion citados acontinuacion :

* El paradigma imperativo:
Utilizando la jerarquia "linea por linea" es el paradigma mas habitual en los lenguajes como C o VB.

* El paradigma funcional está representado por la familia de lenguajes LISP. Aquí todos los programas son un montón de funciones anidadas. (citado textualmente= perfeccion de la definicion hehe)

* El paradigma lógico, un ejemplo es PROLOG.

* El paradigma orientado a objetos.Permite la resolución de un mismo problema a través de infinitos caminos distintos. Tal cual lo hariamos en la susudicha "vida real".

En este ultimo paradigma ,los objetos se conforman de datos miembro y un conjunto de rutinas para verificar y controlar , que reciben el nombre de funciones miembro.

Tres conceptos "superb" predominan en la programacion orientada a objetos, estos son:

1) La abstracción
Es camuflagiar segmentos de la informacion del dominio publico del usuario, para no complicar su tarea con tecnisismos redundantes.

2) La herencia
Es la ramificacion propia de un objeto , que surge inherentemente cuando este se adapta para ejecutar una funcion en colectivo.


3) El polimorfismo
Es la realizacion de una misma funcion atribuida a dos o mas objetos distintos pero que comparten un mismo fin.

Alejandro Fabregas Tejeda
5-TPO

Anónimo dijo...

Paradigmas:

Existen 4 tipos de paradigmas:

* El paradigma imperativo
Es el mas comun utlizado con en c o visual basic y se ejecuta de line por linea.

* El paradigma funcional
son funciones anidadas

* El paradigma lógico
es como el PROLOG

* El paradigma orientado a objetos
se compone por objetos

Los paradigmas son como la forma de manipular datos.

Los 3 conceptos más importantes en programación orientada a objetos son la abstracción la herencia y el polimorfismo.

Saludos tony!! =D
Zeydi Martinez 5°TPO

nota* le entendi mas a lahistoria a pesar de que explicaste un poco hoy en clase!!

Anónimo dijo...

Aquí todos los programas son un montón de funciones anidadas.

El paradigma orientado a objetos. Un lenguaje completamente orientado a objetos es Smalltalk. Aquí todo el programa de compone de objetos, los cuales contienen procedimientos y datos.
También hay algunos lenguajes que mezclan paradigmas. Precisamente de aquí sacamos la palabrita de "programación orientada a objetos".
Es claro que conozcamos objetos (un vaso, una ventana, un carro, etc.), Clases son como los planos de una casa: especifican exactamente como debe de construirse el objeto y como se va a comportar.


La definición de una clase especifica los datos y funciones miembros de esa clase. Por ejemplo, consideremos una clase llamado VerArch que tiene un dato miembro llamado fin. Si tenemos un objeto VerArch llamado oVA, podemos accesar al dato miembro fin usando la notación normal de C++:

if (oVA.fin == NULL)
...Para el objeto VerArch llamado oVA podemos llamar a la función AddLine() así:

oVA.AddLine();

oVA es el nombre del objeto, el punto significa "miembro de", AddLine es el nombre de la función miembro y los paréntesis son indicadores estándares de C++ y Java.

En la programación OO (desde ahora la voy a abreviar como OOP), diseñamos software usando partes componentes, a los que llamamos "objetos". Los objetos se conforman de datos miembro y un conjunto de rutinas para manipular los datos, a los que llamamos funciones miembro.
Otro aspecto de objetos físicos que se extienden a la OOP es la forma en que algunos objetos pueden ser adaptados para crear nuevos objetos.
Y una tercera característica de objetos físicos que agarramos es que diferentes objetos muchas veces operan en la misma manera. Vamos a usar las clases y crear objetos.
En la sección private se especifican los datos miembros de la clase.
Este sería un ejemplo de una clase que guarda datos acerca de un video:

// video.h
class Video
{
public:
Video();
void establecer(char *,char *,int);
char* obtener_nombre();
char* obtener_productor();
int obtener_cantidad();
private:
char nombre[40]
char productor[40];
int cantidad;
}

Esta clase se llama Video (class Video) y tiene 3 datos privados (lo que está después de la línea private): nombre, productor y cantidad.


Gerardo Maciel Medina 5TPO

Unknown dijo...

Bueno para empezar tony hay varios paradigmas de la programacion komoimperativo, funcional, logico, pero del k mas habla es sobre el paradigma orientado a objetos.
Un objeto son objetos (XP) k permiten oidenar el software. sigue una serie de reglas establecidas pore el usuario. C++ es un perfecto ejemplo de esto son los arreglos, funciones, datos, etc.
Todo esto es muy util y se usan en todos los programas (bno almenos en C++)

Unknown dijo...

aqui trata sobre los opp como paradigmas para ello tenemos 3 tipos

el imperativo que es como paso por paso

funcional son instrucciones anidadas

logico es prolog(ton explique eso! por fa)

y orientado a objs aqui contiene procedimientos datos y siempre se compone de objetos

bien, a despues explica que un objeto es como un espacio para guardar instrucciones o clases que el usuario introduce.

y nos dice su 3 tipos de oop

la abstraccion es ocultar la informacion sabiendo que si va a seguir la instruccion dada

la herencia es un objeto que otro para crear mas objetos(valgame!)

y el polimorfismo "muchas formas" que son diferentes objetos pero hacen lo mismo.

listo tony see you aaah no eso es para el mtro de visual jajja

Anónimo dijo...

Brito 5TPO

Los paradigmas de programacion segun tengo entendido son diferentes opciones para la manipulacion de datos

Existe el imperativo, considerado el mas comun donde la ejecucion es de manera lineal.

El funcional compuesto de funciones anidadas.

El logico, y finalmente el orientado a objeto, el cual como dice el nombre esta compuesto por objetos q tienen datos.

La definicion de objeto seria el concepto que nos da la oportunidad de organizar software.

Existen 3 caracteristicas importantes

1- Abstraccion: Utilizado para esconder informacion

2- Herencia: Cuando un objeto se adapta para crear un nuevo objeto.

3- Poliformismo: Diferentes objetos q operan de la misma forma

Anónimo dijo...

emilio cendejas rios 5 tpo legitimo consejal y maestro de la musica

pues es bre ve el texto acerca de los paradigmas algunos tienen ejemplos mas no explicacion :S el ke mas comprendi fue el orientado a objetos y los lineales k ya habiamos trabajado en otros VB aunke el de objetos me parece lo mismo k lo de antes a exepcion k se usan clases y un par de cosas nuevas supongo k mas utiles pero komo kerias un resumen ai te va l importante del asunto

* El paradigma imperativo es considerado el más común y está representado, por ejemplo, por el C o por BASIC. Aquí los programas se ejecutan de manera lineal, una instrucción a la vez, línea por línea, siempre en el mismo orden.
* El paradigma funcional está representado por la familia de lenguajes LISP. Aquí todos los programas son un montón de funciones anidadas.
* El paradigma lógico, un ejemplo es PROLOG.
* El paradigma orientado a objetos. Un lenguaje completamente orientado a objetos es Smalltalk. Aquí todo el programa de compone de objetos, los cuales contienen procedimientos y datos.

tengo buena espectativas del curso aver k nuevo aprendizaje nos deja y k novedades bizarras logramos hacer en .net

Anónimo dijo...

hola de nuevo xD!
no me queda la idea muy clara de lo que es un objeto, pero mas o menos se podría decir que un objeto es nose como una cajita musical que dentro de está hay un conjunto de mecanismos que hacen música(no se exactamente el nombre de las partes de la cajita, pero cada una tiene que desempeñar una función para hacer que la cajita "toque la música"); ese seria el objeto y lo de hacer música seria la orden que da el programador al objeto.
(bueno eso digo yo jiji)

No entiendo lo de clases seria algo así como el que define que hace cada objeto o ¿Qué?.

Bueno de lo de "encapsulamiento" no hay mucho que explicar solo es ocultar en especifico el funcionamiento de un objeto y solamente saber que en nos puede ayudar o que puede hacer osease que no se necesita saber como "charcha" cada objeto solo saber que es lo que va a hacer.

La "Herencia" lo que me da a entender es que ciertas cosas de un objeto cambian para incluir a otro pero el diseño básico queda igual(¿si no?).

El "Polimorfismo" ps es como tu dices que varios objetos pueden operar igual aunque no sean los mismos.

lo de public y private es lo que uno puede ver o acceder (public) y a lo que no se nos tiene permitido pasar(private) aunque los miembros de esa clases son, como quien diria, los únicos autorizados en pasar.:)

y ps eso es todo tony.. creo que di una vaga idea de lo que explicas, ojala y en el salon se despejen las dudas..jiji....

nos vemos luego xD!

Att:Stephany Guzmán 5 tpo.

Anónimo dijo...

Q onda profe
soy Luis Felipe Sanchez de 5tpo (Fitux)

Bueno profe como usted dice en el comienzo de este post este e refiere sobre la programacion orientada a objetos usando C++ en este caso

Y ablaremos de los paradigmas q tienen q ver con este tema q son:

• El paradigma imperativo.

• El paradigma funcional.

• El paradigma lógico.

• El paradigma orientado a objetos.

Y tambien ablan de tres conceptos muy importantes

Abstrancion, Herencia y Polimorfismo

Abstraccion es ocultar la informacion.

Herencia es un objeto que se deriva de otro.

El polimorfismo son muchos iguales por dentro no en su exterior.

El Tony y sus ondas...

Related Posts Plugin for WordPress, Blogger...