Fecha y hora actual: Domingo 25 Ago 2019 04:41
Índice del Foro

Foros de programación informática, diseño gráfico y Web

En esta comunidad intentaremos dar soporte de programación a todos los niveles, desde principiantes a profesionales de la informática, desarrollo de programas, programación web y mucho más.

Programando desde 0: 42- Teoría de objetos (Introducción).

Responder al Tema

Índice del Foro > Programación en general > Programando desde 0: 42- Teoría de objetos (Introducción).

Autor Mensaje
Kyshuo Ayame
Moderador Global


Registrado: 07 Ene 2011
Mensajes: 1043

Mensaje Publicado: Lunes 26 Dic 2011 18:29

Título del mensaje: Programando desde 0: 42- Teoría de objetos (Introducción).

Responder citando

Lección 42: Introducción a la Teoría de Objetos.

En esta lección hablaremos de una introducción a la Teoría de Objetos, luego el concepto se desarrollará por sí mismo a medida que trabajen con los proyectos y ejercicios. Terminaremos de desarrollar esta teoría cuando entremos a Java, pero para eso falta bastante.

Antes de entrar en esta introducción, quiero que veamos una breve síntesis sobre los módulos de un programa y sus dependencias.
----------------------------------------------------------------------------------------

Dependencia de Módulos:

Dado el pequeño sistemita que hemos armado, veamos una pequeña introducción a la dependencia de módulos. La idea es sencilla y básicamente es así: Como el módulo principal, que en este ejemplo se llama Aplicacion, utiliza operaciones del módulo Persona decimos que el módulo Aplicacion depende del módulo Persona porque si este no existiera el módulo Aplicacion no podría hacer sus gestiones.



La forma de dibujarlo es esa, como si el módulo Persona se dirigiera hacia el módulo Aplicación. Ese dibujo dice: Aplicación depende de Persona. Además se ve que Persona es independiente porque no depende de nadie.

Esta forma gráfica de visualizar el sistema nos ayudará mucho cuando tengamos muchos módulos y muchas dependencias entre ellos. El módulo principal siempre se dibuja resaltado.

-------------------------------------------------------------------------------------

Introducción a la teoría de objetos:

Definición de Objeto:

Este concepto bien podría haber sido mencionado antes, sin embargo no toma sentido hasta ahora, donde tenemos un Tipo Abstracto de Datos encapsulado en un módulo, el cual tiene sus atributos y operaciones.
Habrán notado ya que les hablo de objetos. Yo no dije: “La variable p de tipo Persona”, sino que dije “El objeto p de tipo Persona”. Ustedes saben que p es un puntero a algo, pero olvídense de eso. Ustedes saben entonces que p representa a algo que tiene nombre, edad, sueldo, horas trabajadas y documento de identidad. Además saben que p puede decirnos cuál es su edad o cuál es su sueldo ganado. También puede modificar su nombre, o imprimirse en pantalla.

Entonces podemos decir que p representa a una entidad que además de tener ciertos datos es capaz de realizar ciertas acciones. Si por ejemplo tuviéramos esto:

Código:
VAR
   p, q: Persona;


Tenemos que p y q son objetos del mismo tipo, es decir que ambos tienen los mismos tipos de atributos y pueden hacer las mismas cosas. Sin embargo p y q son objetos diferentes ¿estamos de acuerdo?

Ahora imaginen que le pasamos a los constructores de p y q los mimos datos, es decir, que p y q tendrán el mismo valor como nombre, la misma edad, el mismo documento, etc. Sin embargo no son la misma Persona. Tal vez sí en lo que refiere a los datos, pero como objetos de tipo Persona siguen siendo diferentes porque lo que hace p no influye en q y viceversa. Por ejemplo, si yo le cambio el nombre a p mediante la operación CambiarNombrePersona, el de q seguirá siendo igual.

Entonces, por más que dos objetos del mismo tipo tengan los mismos atributos no son iguales, no son el mismo objeto. Esto apunta a una definición muy importante:

¿Qué es un objeto? Un objeto es una entidad de memoria que está definida por tres características:

  • Estado: El estado de un objeto está dado por los valores de sus atributos en un momento de tiempo dado. Es decir que, si en un momento el objeto p tiene estos valores en sus atributos:
    Código:
    Nombre= “Kyshuo”
        Edad= 22
       SueldoPorHora= 100.0
       HorasTrabajadas= 20.0

    ese será su estado. Si luego cambia uno o más de esos valores decimos que su estado cambió.

  • Comportamiento: El comportamiento de un objeto está dado por las operaciones que puede ejecutar, digamos, las “cosas” que puede hacer. Para un objeto de tipo Persona tendremos que su comportamiento está dado por las 8 operaciones que definimos, 10 si ustedes agregaron las que corresponden a mostrar y modificar el documento.

  • Identidad: Hay varias formas de definir lo que es la identidad de un objeto, sin embargo todas concuerdan en algo: La identidad es lo que permite diferenciar a un objeto de otro y tomarlo como único. Nosotros tomaremos la definición más común: La identidad de un objeto está dada por su dirección de memoria. Esto significa si dos objetos están en lugares distintos de memoria entonces son distintos.


Como ya saben lo que es el estado de un objeto, si por ejemplo tenemos dos objetos de tipo Persona, p y q, y ambos tienen exactamente el mismo estado, como ya dije, no son el mismo objeto porque cada uno tiene su lugar de memoria.

Si ustedes preguntan si p=q Modula les dirá FALSE ya que p apunta a un lugar y q a otro. Es como si tuviéramos dos punteros a INTEGER teniendo ambos el valor 8; eso no hace que sean el mismo puntero.
Tengan mucho cuidado con esto, porque es común que uno crea que preguntar si p=q es lo mismo que preguntar si p y q comparten los mismos datos, es decir, que tengan el mismo nombre, la misma edad, etc; pero esto no es así en absoluto.

Ahora bien, si ustedes tienen un objeto p ya creado (inicializado mediante el constructor) y otro objeto q, ustedes pueden hacer p:= q con lo cual ahí sí p y q serán el mismo objeto porque apuntan al mismo lugar de memoria, es decir, son alias.

Si han trabajado con punteros como debían, entenderán los problemas que puede traer tener alias de objetos. Todo esto funciona igual a los punteros y es por eso que dije que en Modula el manejo de punteros es la base.

En realidad entonces, un objeto es la entidad de memoria, nosotros tenemos referencias a esas entidades, es decir, tenemos los punteros que las apuntan y nos basamos en ellos para trabajar. De este modo, dada esta declaración

Código:
VAR
   p: Persona;


no es correcto decir que p es un objeto de tipo Persona, sino que lo correcto es decir que p es una referencia a un objeto de tipo Persona. Esa es la visualización correcta.



En esa ilustración pueden ver lo que quiero decir. Los objetos son entidades de memoria que tienen sus atributos y sus operaciones. Las variables son simplemente referencias a ellos. ¿Por qué diferenciar esto? Pues sigamos esto:

Tenemos p y q del tipo Persona, ambos ya inicializados como en la ilustración anterior. Si luego yo hago r:= p tendré una nueva referencia al mismo objeto referenciado por p, en este caso, al que está arriba.



Si yo ahora hago
Código:
p:= CrearPersona(datosDeLaNuevaPersona);


tendré un nuevo objeto Persona que será referenciado por p. El objeto que inicialmente estaba referenciado por p seguirá siendo el mismo, no habrá cambiado en absoluto, solo que ahora estará referenciado solo por r. Es por eso que hago énfasis en diferenciar objeto de referencia a objeto.

Yo puedo manipular a las referencias a objetos como quiera sin alterar a los objetos. Obviamente que para manipular al objeto no tengo más que hacerlo mediante las referencias, pero quiero que tengan bien en claro cómo es la cuestión.

En la página siguiente tienen la ilustración de cómo quedan las cosas luego de la instrucción anterior que crea una nueva persona y asigna la referencia a p:



Les dejaré entonces un ejercicio en el que se crearán tres objetos del tipo Persona, luego se harán cambios entre las referencias para finalmente imprimir imprimir en pantalla los datos de uno de ellos. Ustedes deberán deducir qué datos saldrán en pantalla:

Ejercicio: Dadas las siguientes declaraciones de variables:
Código:
VAR
       p, q, r, aux: Persona;


indiquen que será mostrado en pantalla luego de ejecutar el siguiente código. Tengan en cuenta que en este ejercicio estamos usando el módulo Persona tal como lo dejamos en los ejemplos anteriores, o sea, sin modificarlo para que tenga el atributo documento.
Código:

p:= CrearPersona("Kyshuo",22,100.0,20.0);
q:= CrearPersona("Lilian",20,150.0,10.0);
r:= CrearPersona("Juan",21,200.0,30.0);
aux:= p;
p:= q;
q:= aux;
aux:= r;
r:= p;
p:= aux;

ImprimirPersona(p);


Esto no es más que mera manipulación de punteros. Estaré disponible para todas sus dudas.

-------------


En la lección que viene veremos nociones básicas sobre el diseño de un sistema tomando como ejemplo un sistema pequeño. Haremos todo paso a paso para que se entienda y sea interesante.

Saludos.

Volver arriba
Ver perfil del usuario Enviar mensaje privado
pirdy
Usuario Inquieto


Registrado: 11 Feb 2010
Mensajes: 137

Mensaje Publicado: Martes 27 Dic 2011 23:38

Título del mensaje: Re: Programando desde 0: 42- Teoría de objetos (Introducción

Responder citando

Gracias, gracias, gracias.

Siga dandones estas grandisimas lecciones. A ver si me pongo de lleno con esto este año que entra porque trabajo y ejemplos nos da bastante .para avanzar en la programacion.

Feliz Año al foro y por supuesto a nuestro profe.

A NUESTRO AMADO LIDER. Maria

Volver arriba
Ver perfil del usuario Enviar mensaje privado
sr floyd
Usuario Activo


Registrado: 05 Sep 2011
Mensajes: 196

Mensaje Publicado: Lunes 08 Oct 2012 16:09

Título del mensaje: Re: Programando desde 0: 42- Teoría de objetos (Introducción

Responder citando

Con respecto al ejercicio dejado por el profesor Kyshuo al final de la lección digo:
La operación ImprimirPersona se ejecuta pasándole como parámetro efectivo a p, por tanto, se imprimirán los atributos del objeto al que p hace referencia; vemos que la ultima asignación a p es:
Código:
p:=aux;

pero antes vemos:
Código:
aux:=r;
asi que p hace referencia al objeto al que apuntaba r, sin importar los cambios de referencia de r posteriormente, con lo cual se puede concluir que finalmente en el código p queda apuntando al objeto al que inicialmente apuntaba r, es decir:
Código:
p:= CrearPersona("Juan",21,200.0,30.0);
lo cual es el objeto persona correspondiente con sus respectivos atributos valorados de acuerdo a los parámetros efectivos, es decir, nombre: juan; edad:21 . . .
si estoy equivocado corrijanme por fa.
Gracias Kyshuo ! Ojos

Volver arriba
Ver perfil del usuario Enviar mensaje privado MSN Messenger
xRoki
Usuario Inquieto


Registrado: 22 Ago 2013
Mensajes: 71

Mensaje Publicado: Jueves 10 Oct 2013 00:59

Título del mensaje: Re: Programando desde 0: 42- Teoría de objetos (Introducción

Responder citando

digo que ya q a la final todas apuntaban a 1 xD
Código:
p:= CrearPersona("Juan",21,200.0,30.0);

Volver arriba
Ver perfil del usuario Enviar mensaje privado
Responder al Tema
Mostrar mensajes anteriores:   
Ir a:  
Todas las horas están en GMT + 2 Horas

Temas relacionados

Tema Autor Foros Respuestas Publicado
El foro no contiene ningún mensaje nuevo

Buenas desde el sur del sur =)

Maugarni Preséntate a la comunidad 1 Jueves 22 Ago 2019 14:09 Ver último mensaje
El foro no contiene ningún mensaje nuevo

Hola desde bcn

Dav2k6 Preséntate a la comunidad 2 Miércoles 26 Jun 2019 19:22 Ver último mensaje
El foro no contiene ningún mensaje nuevo

Existen problemas al descargar musica desde you...

SusanaP Tu PC 2 Martes 26 Mar 2019 19:22 Ver último mensaje
El foro no contiene ningún mensaje nuevo

hola!! los saludo desde argentina

mery Preséntate a la comunidad 2 Jueves 13 Dic 2018 17:28 Ver último mensaje
El foro no contiene ningún mensaje nuevo

Llamada a web service desde form

mrrobot2 Programación Web en general 1 Martes 14 Nov 2017 00:50 Ver último mensaje
Panel de Control
No puede crear mensajes, No puede responder temas, No puede editar sus mensajes, No puede borrar sus mensajes, No puede votar en encuestas,