BotonMenu
BotonIndice

Visita : conoce3000.com
Paypal : https://www.paypal.com/donate/?hosted_button_id=XY8TZ3MGN64GE

PASCAL CON FREE PASCAL

PASCAL CON FREE PASCAL

PASCAL CON FREE PASCAL


12. INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS III.
12.3. RELACIONES ENTRE CLASES.
12. INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS III.
12.3. RELACIONES ENTRE CLASES.
12. INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS III.
12.3. RELACIONES ENTRE CLASES.

SIGUIENTE

SIGUIENTE

SIGUIENTE


‒ Relaciones entre clases.

Dentro de un diagrama de clases en UML, se presentan las siguientes relaciones entre clases: Dependencia, Agregación, Composición, Generalización y Realización.

En los capítulos anteriores ya se vieron las relaciones de Generalización y Realización, pasaré a explicarlos para entender la diferencia con las otras.

Una Generalización es una relación de derivación en la cual una clase deriva de otro sus atributos y métodos. Su implementación se hace a través de la herencia, tal como se vio en los ejemplos sobre las clases TComplejo y TReal (Ver Capítulo 10.5), en donde TReal, deriva de TComplejo o dicho de otro modo TReal hereda los atributos y métodos de TComplejo. A esta relación se le puede asociar la frase “... es un ...”, ya que podemos decir que TReal es un TComplejo.

La Realización es una relación, en la cual una clase debe poner en practica o debe realizar el comportamiento especificado por otra clase, esta relación se puede implementar con clases abstractas, como en los ejemplos de las clases TComplejo y TNumero, (Ver Capítulo 11.3). La clase TComplejo con la clase TNumero, tienen un relación de realización. A esta relación se le puede asociar con la frase “... realiza lo que indica ...”, ya que podemos decir que TComplejo realiza lo que indica TNumero.

La Dependencia, es una relación que nos indica que una clase usa a otra clase, la forma de implementarlo consiste en hacer pasar como parámetro una instancia de la clase a los métodos de la clase que la necesiten, como se vio en el primer ejemplo de la clase TComplejo (Ver Capítulo 10.2), en donde se usa la misma clase TComplejo, para realizar las operaciones de Multiplicación y Adición, en el cuál el método Multiplicación tiene como parámetro a un objeto de la clase de TComplejo. A esta relación se le puede asociar con la frase “... usa un ...”, con lo que podemos decir siguiendo el ejemplo, que TComplejo usa una instancia de TComplejo.

La Agregación, es una relación en la que una clase tiene otra clase dentro de la clase. En esta relación la clase que contiene otras clases se conoce como clase contenedora. La clase que esta dentro de una clase contenedora, tiene un ciclo de vida independiente de la clase contenedora, es decir la instancia de esta clase no es destruido cuando una instancia de la clase contenedora es destruido. La forma de implementarlo es usando atributos que sean instancias u objetos de una clase. A este tipo de relaciones se les puede asociar con la frase “... tiene un ...”. Este tipo de relación no se vio en los capítulos anteriores, con lo que a continuación se da el siguiente ejemplo, este ejemplo es una versión modificada del ejemplo visto en en el capítulo 5.2, específicamente el 2do código fuente, pero antes se muestra la unidad ListaReales que usará el programa de ejemplo.


Descargar
{$codepage utf8}
{$mode objfpc}
Unit ListaReales;
Interface

Type

  TListaReales = class
    private
     Elementos:array of double;
     Procedure Pon(indice:integer;r:double);
     Function Obt(indice:integer):double;
    public
     cantidad:integer;
     Constructor Crear(n:integer=100);
     Property Elemento[i:integer]:double read Obt write Pon;default;
  End;

Implementation


  Procedure TListaReales.Pon(indice:integer;r:double);
    Begin
      Elementos[indice]:=r;
    End;

 Function TListaReales.Obt(indice:integer):double;
    Begin
     Obt:=Elementos[indice]
    End;

 Constructor TListaReales.Crear(n:integer=100);
    Begin
      SetLength(Elementos,n);
      cantidad:=n
    End;
End.
Código fuente 9: Unidad ListaReales que usarán los programa del código fuente 10 y 11.
Descargar


Descargar
{$codepage utf8}
{$mode objfpc}
Uses ListaReales;
Type
  TTablaFrecuencias = class    
    class var
      i:longint;
    var

    ni,hi,NiMenorQ:TListaReales; 
    Tni,Thi:double;
    cantidad:longint;
	
    Constructor Crear(n:longint;a,b,c:TListaReales);
    Procedure Lectura;
    Procedure Calculos;
    Procedure Mostrar;	
  End; 
  
  Constructor TTablaFrecuencias.Crear(n:longint;a,b,c:TListaReales);
   Begin
     ni:=a;
     hi:=b;
     NiMenorQ:=c;
     cantidad:=n;
   End;
   
  Procedure TTablaFrecuencias.Lectura;
   Var aux:double;  
   Begin   
    for i:=0 to  cantidad-1 do     
      Begin
       Write('ni[',i,'] ');
	   readln(aux);	   	   
	   ni[i]:=aux; 
	   Tni:=Tni+ni[i]; 	   
	 End; 
   End;   

  Procedure TTablaFrecuencias.Calculos;
   Begin
    for i:= 0 to cantidad-1 do Begin hi[i]:=ni[i]/Tni; Thi:=Thi+hi[i]; End;    
    NiMenorQ[0]:=ni[0];
    for i:=1 to cantidad-1 do  NiMenorQ[i]:=NiMenorQ[i-1]+ni[i];          
   End;   

  Procedure TTablaFrecuencias.Mostrar;
   Begin
     Writeln('        ni        hi        Ni');
     for i:=0 to cantidad-1 do 
       Writeln(' ',ni[i]:10:2,hi[i]:10:2,NiMenorQ[i]:10:2);	   
     Writeln;
     Writeln('Total ',tni:5:2,thi:10:2)
   End;    

Var TablaFrecuencias:TTablaFrecuencias; 
    ni,hi,NiMenorQ:TListaReales;   
    n:longint;
Begin
  Write('Ingrese numero de datos : ');readln(n);
  ni:=TListaReales.Crear(n);
  hi:=TListaReales.Crear(n);
  NiMenorQ:=TListaReales.Crear(n);
  TablaFrecuencias:=TTablaFrecuencias.Crear(n,ni,hi,NiMenorQ);

  TablaFrecuencias.Lectura;
  TablaFrecuencias.Calculos;
  TablaFrecuencias.Mostrar
End.
Código fuente 10: Programa de ejemplo sobre Agregación.
Descargar

Este programa contiene una clase que implementa una tabla de frecuencias estadística, en donde dentro de esta clase se implementan las frecuencias absolutas (ni), frecuencias relativa (hi) y frecuencias acumuladas (Ni), que son instancias de la clase TListaReales. Como se puede observar las frecuencias de esta tabla es decir las instancias ni, hi, NiMenorQ, son creadas desde fuera de la instancia TablaFrecuencias, para luego ser introducidas a la instancia, con el uso de su constructor. Es importante entender esta particularidad ya que la siguiente relación que explicaré es muy similar a esta y sólo se diferencia en como se crean las instancias que están dentro de la clase contenedora que en este caso es la clase TTablaFrecuencias.

La Composición, es una relación muy similar a la agregación en la que una clase posee otra clase dentro de la clase. En esta relación la clase que esta dentro de una clase contenedora, no tiene un ciclo de vida independiente de la clase que lo contiene, es decir la instancia de esta clase es destruido cuando una instancia de la clase contenedora es destruido. La forma de implementarlo es igual que la agregación, pero las instancias son creadas generalmente con el constructor de la clase contenedora y destruidos cuando la instancia de la clase contenedora es destruido. A este tipo de relaciones se les puede asociar con la frase “... posee un ...”. Como ejemplo se tomara el código fuente anterior, pero modificando la clase TTablaFrecuencias, para que en este caso las frecuencias que son instancia de la clase TListaReales, se creen dentro de la instancia TablaFrecuencias.


Descargar
{$codepage utf8}
{$mode objfpc}
Uses ListaReales;
Type
  TTablaFrecuencias = class
    class var
      i:longint;
    var

      ni,hi,NiMenorQ:TListaReales;
    Tni,Thi:double;
    cantidad:longint;

    Constructor Crear(n:longint);
    Procedure Lectura;
    Procedure Calculos;
    Procedure Mostrar;
  End;

  Constructor TTablaFrecuencias.Crear(n:longint);
   Begin
     ni:=TListaReales.Crear(n);
     hi:=TListaReales.Crear(n);
     NiMenorQ:=TListaReales.Crear(n);
     cantidad:=n;
   End;

  Procedure TTablaFrecuencias.Lectura;
   Var aux:double;
   Begin
    for i:=0 to  cantidad-1 do
      Begin
       Write('ni[',i,'] ');
       readln(aux);
       ni[i]:=aux;
       Tni:=Tni+ni[i];
      End;
   End;

  Procedure TTablaFrecuencias.Calculos;
   Begin
    for i:= 0 to cantidad-1 do Begin hi[i]:=ni[i]/Tni; Thi:=Thi+hi[i]; End;
    NiMenorQ[0]:=ni[0];
    for i:=1 to cantidad-1 do  NiMenorQ[i]:=NiMenorQ[i-1]+ni[i];
   End;

  Procedure TTablaFrecuencias.Mostrar;
   Begin
     Writeln('        ni        hi        Ni');
     for i:=0 to cantidad-1 do
       Writeln(' ',ni[i]:10:2,hi[i]:10:2,NiMenorQ[i]:10:2);
     Writeln;
     Writeln('Total ',tni:5:2,thi:10:2)
   End;

Var TablaFrecuencias:TTablaFrecuencias;
    n:longint;
Begin
  Write('Ingrese numero de datos : ');readln(n);
  TablaFrecuencias:=TTablaFrecuencias.Crear(n);
  TablaFrecuencias.Lectura;
  TablaFrecuencias.Calculos;
  TablaFrecuencias.Mostrar
End.
Código fuente 11: Programa de ejemplo sobre Composición.
Descargar

Cómo se puede observar en este ejemplo, el constructor de la clase TTablaFrecuencias se encargará de crear las instancias de TListaReales.


Última revisión: 03/07/2014.



SIGUIENTE
SIGUIENTE
SIGUIENTE


 
‒ Comentarios y sugerencias.

Agradezco de antemano, todo comentario, sugerencia, y donativo a través de , que ayude a mejorar los contenidos educativos de Conoce 3000. Además, cualquier pregunta o duda que tengas lo puedes hacer por este medio. Pero, todo contenido que pueda resultar ofensivo, malicioso, racista, sexista, discriminatorio, obsceno, vulgar será eliminado. Para clases particulares contactame por whatsapp al 📲 (+51) 999 264 073








PORTADA |  INTERESANTE |  APUNTES |  LIBROS |  GALERIA


Creative Commons License


Todos los textos, imágenes y videos de Conoce3000 estan colocados bajo una licencia : Creative Commons Reconocimiento-NoComercial 3.0 Unported License.