Vous êtes sur la page 1sur 28

Herencia y polimorfismo

Deimer De Jesus Ramos Cuello Andres Felipe Rodriguez Fuentes

Universidad de Crdoba Facultad de Ciencias Bsicas e Ingenieras Departamento de Ingeniera de Sistemas y Telecomunicaciones

El acronimo DoME surge a partir de los terminos database of multimedia entretainment (base de datos de entretenimiento multimediales). El nombre completo es muy grande para un programa tan simple como el que vamos a desarrollar. (pero, cuidado porque el marketing es la mitad del juego; dentro de un tiempo, un nombre impactante podria ayudarnos a enriquecernos mediante la venta de muchas copias de nuestro programa, no es cierto?). En esencia, DoME es una aplicacin que nos permite almacenar informacion sobre discos compactos de musica (en CD) y de peliculas en (DVD). La idea es crear un catalogo de todos los CD y DVD que tenemos, o todos los que hemos visto o escuchado. La funcionalidad que queremos que nos brinde DoME incluye como minimo lo siguiente: Debe permitirnos ingresar informacin sobre los CD y los DVD. Debe almacenar esta informacin de forma permanente, de tal forma que pueda ser utilizada mas adelante. Debe brindar una opcin de bsqueda que nos permita por ejemplo, encontrar todos los CD de un cierto intrprete que hay en la base, o todos los DVD de cierto director. (Nota: por razones de simplicidad, asumimos aqu que solo tenemos DVD de pelculas, de modo que al almacenar un DVD sabemos que queremos almacenar informacin sobre pelculas). Debe permitirnos imprimir listados como por ejemplo: listado de todos los DVD que hay en la base de datos o un listado de todos los CD de msica. Debe permitirnos eliminar informacin.

Los detalles que queremos almacenar de cada CD son: El titulo del lbum; El interprete (nombre de la banda o cantante); El numero de temas que tiene el CD; El tiempo de duracin del CD; Un comentario (un texto arbitrario);

Los detalles que queremos almacenar de cada DVD son: El titulo del DVD; Nombre del director; El tiempo de duracin; Pas (donde fue hecha la pelcula); Un comentario (un texto arbitrario);

unit Upadre; //Unidad padre, donde definimos los atributos comunes.

{$mode objfpc}{$H+}

interface

uses Classes, SysUtils; type

{ padre }

padre=class private titulo:string; nombre:string; duracion:string; comentario:string; public constructor create;virtual; //mtodo constructor de la clase. //Declaracin de los mtodos modificadores de la clase. procedure settitulo (t:string); //Declaracion de los mtodos selectores de la clase. function gettitulo:string; procedure setnombre (n:string); function getnombre:string; procedure setduracion (d:string); function getduracion:string; procedure setcomentario (c:string);

function getcomentario:string; end;

implementation

{ padre } //implementacin del mtodo constructor de la clase padre. constructor padre.create; begin nombre:=''; comentario:=''; duracion:=''; titulo:=''; end;

//Implementacin del mtodo modificador para el atributo titulo. procedure padre.settitulo(t: string); begin titulo:=t; end;

//Implementacin del mtodo selector para el atributo titulo. function padre.gettitulo: string; begin Result:=titulo; end;

//Implementacin del mtodo modificador para el atributo nombre. procedure padre.setnombre(n: string);

begin nombre:=n; end;

//Implementacin del mtodo selector para el atributo nombre. function padre.getnombre: string; begin Result:=nombre; end;

//Implementacin del mtodo modificador para el atributo duracion. procedure padre.setduracion(d: string); begin duracion:=d; end;

//Implementacin del mtodo selector para el atributo duracion. function padre.getduracion: string; begin Result:=duracion; end;

//Implementacin del mtodo modificador para el atributo comentario. procedure padre.setcomentario(c: string); begin comentario:=c; end;

//Implementacin del mtodo selector para el atributo comentario. function padre.getcomentario: string; begin Result:=comentario; end;

end.

Esta fue la implementacin de la clase padre, que contiene loas datos comunes para la clase CD y DVD.

unit Ucd;

{$mode objfpc}{$H+}

interface

uses Classes, SysUtils,Upadre;//Se une la clase hija Ccd con la padre, para poder heredar los atributos. type

{ Ccd }

Ccd=class (padre)//se coloca el nombre de la unidad padre para poder llamar los atributos. private npistas:string; public constructor create;override; //Mtodo constructor de la clase sobrescrito. procedure setnpistas (np:string); function getnpistas:string; end;

implementation

{ Ccd }

constructor Ccd.create; begin inherited create;

npistas:=''; end;

procedure Ccd.setnpistas(np: string); begin npistas:=np; end;

function Ccd.getnpistas: string; begin Result:=npistas; end;

end.

Lo anterior fue la implementacin de la clase hija que se encargara de los datos de CD.

unit Udvd;

{$mode objfpc}{$H+}

interface

uses Classes, SysUtils,Upadre; ;//Se une la clase hija Ccd con la padre, para poder heredar los atributos. type

{ Cdvd }

Cdvd=class (padre)//se coloca el nombre de la unidad padre para poder llamar los atributos. private pais:string; public constructor create;override; procedure setpais (pa:string); function getpais:string; end;

implementation

{ Cdvd }

constructor Cdvd.create;

begin inherited create; pais:=''; end;

procedure Cdvd.setpais(pa: string); begin pais:=pa; end;

function Cdvd.getpais: string; begin Result:=pais; end;

end. Lo anterior fue la implementacin de la clase hija que se encargara de los datos de DVD.

unit Uvectores;//tenemos una unidad vector, donde encontramos dos vectores, uno para llamar todos los datos de CD y el otro para DVD y manejarlos por posicin.

{$mode objfpc}{$H+}

interface

uses Classes, SysUtils,Udvd,Ucd;//Enlazamos la unidad vectores con las unidades Udvd y Ucd, para poder obtener sus datos. type

{ vectores }

vectores=class private vectorcd:array of Ccd; vectordvd:array of Cdvd; num:integer; //numero de elementos que tendr el vector de objetos. public constructor create; //Definicin del mtodo constructor de la clase. procedure crearvector; //Declaracin del mtodo que me permite estipular el tamao para el vector de objetos. procedure setvectorcd (pos:integer; dat:Ccd); //Declaracin de los mtodos modificadores de la clase. function getvectorcd selectores de la clase. (pos:integer):Ccd; //Declaracin de los mtodos

procedure setvectordvd (pos1:integer; dat1:Cdvd);

function getvectordvd (pos1:integer):Cdvd; procedure setnum (n:integer); function getnum:integer; function buscarcd (dat:string):integer;//metodo para buscar los CD, por lbum. function buscardvd (dat1:string):integer;//metodo para buscar los DVD, por nombre. end;

implementation

{ vectores } //Implementacin del mtodo constructor de la clase. constructor vectores.create; var i:integer; begin for i:= 0 to getnum-1 do begin setvectorcd(i,Ccd.create); setvectordvd(i,Cdvd.create); end; end;

//Declaracin del mtodo que permite crear el tamao que tendr el vector de objetos. para esto utilizamos //el mtodo SetLength, que permite asignar el tamao en tiempo de ejecucin a un vector. procedure vectores.crearvector; begin

SetLength(vectorcd,num); SetLength(vectordvd,num); end;

procedure vectores.setvectorcd(pos: integer; dat: Ccd); begin vectorcd[pos]:=dat; end;

function vectores.getvectorcd(pos: integer): Ccd; begin Result:=vectorcd[pos]; end;

procedure vectores.setvectordvd(pos1: integer; dat1: Cdvd); begin vectordvd[pos1]:=dat1; end;

function vectores.getvectordvd(pos1: integer): Cdvd; begin Result:=vectordvd[pos1]; end;

procedure vectores.setnum(n: integer); begin num:=n;

end;

function vectores.getnum: integer; begin Result:=num; end;

//implementacin del mtodo para buscar CD, por nombre del lbum. function vectores.buscarcd(dat: string): integer; var i: integer; pos: integer; begin pos:= -1; i:= 0; while (i<=num) and (pos =-1) do begin if getVectorcd(i).getTitulo= dat then begin pos:=i; end else begin i:=i+1; end; Result:=pos; end;

end;

//Implementacin del mtodo buscar DVD, por medio del nombre de la pelcula. function vectores.buscardvd(dat1: string): integer; var i: integer; pos: integer; begin pos:= -1; i:= 0; while (i<= num) and (pos =-1) do begin if getVectordvd(i).getTitulo= dat1 then begin pos:=i; end else begin i:=i+1; end; Result:=pos; end; end; end. Aqu terminamos la implementacin de la clase vectores. Que sirvi para guardar toda la informacin sobre CD y DVD. Tambin permitido la implementacin de los mtodos buscar. Y as llegamos a la parte grafica.

unit Ugrafica;

{$mode objfpc}{$H+}

interface

uses Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs, StdCtrls, ComCtrls, Uvectores, Udvd, Ucd, Upadre;//enlazamos todas las unidades para poder ser utilizadas en esta unidad grafica.

type

{ TForm1 }

TForm1 = class(TForm) Bok: TButton; alb: TEdit; Bbuscar: TButton; Bguardar: TButton; Beliminar: TButton; Blimpiar: TButton; Bsalir: TButton; com: TEdit; dire: TEdit; ddu: TEdit; come: TEdit;

bus: TEdit; Label12: TLabel; ListBox1: TListBox; ListBox2: TListBox; pai: TEdit; Label10: TLabel; Label11: TLabel; Label9: TLabel; titu: TEdit; g2: TGroupBox; Label7: TLabel; Label8: TLabel; np: TEdit; inte: TEdit; dur: TEdit; g1: TGroupBox; Label3: TLabel; Label4: TLabel; Label5: TLabel; Label6: TLabel; op: TComboBox; Label2: TLabel; tam: TEdit; Label1: TLabel; up: TUpDown; procedure BbuscarClick(Sender: TObject); procedure BguardarClick(Sender: TObject);

procedure BlimpiarClick(Sender: TObject); procedure BokClick(Sender: TObject); procedure BsalirClick(Sender: TObject); procedure FormClose(Sender: TObject; var CloseAction: TCloseAction); procedure FormCreate(Sender: TObject); procedure FormShow(Sender: TObject); procedure opChange(Sender: TObject); private obj:vectores; //Declaramos la instancia global para la clase TVectorObjetos, en toda la ventana procedure mostrar; procedure llenarcd (c:Ccd); procedure llenardvd (d:Cdvd); { private declarations } public { public declarations } end;

var Form1: TForm1;

implementation

{ TForm1 }

procedure TForm1.FormClose(Sender: TCloseAction);

TObject;

var

CloseAction:

begin obj.Free; end;

//implementacion del boton salir. procedure TForm1.BsalirClick(Sender: TObject); begin close; end;

//implementacion del boton limpiar. procedure TForm1.BlimpiarClick(Sender: TObject); var i:integer; begin for i:= 0 to obj.getnum-1 do begin obj.setvectorcd(i,nil); obj.setvectordvd(i,nil); end; ListBox1.Clear; ListBox2.Clear; op.Text:=''; alb.Clear; inte.Clear; dur.Clear; np.Clear;

com.Clear; titu.Clear; dire.Clear; ddu.Clear; pai.Clear; come.Clear; bus.Clear; tam.SetFocus; up.Position:=0; end;

//Implementacin del evento de botn para asignar el tamao o numero de elementos que tendr el vector //de objetos. procedure TForm1.BokClick(Sender: TObject); var n:integer; begin n:=StrToInt(tam.Text); obj.setnum(n); obj.crearvector; up.Max:=obj.getnum-1; ShowMessage('El tamao del vector es: '+IntToStr(obj.getnum)); tam.Clear; end;

//Implementacion del metodo guardar, que nos permite almacenar en listbox la informacion sobre CD y DVD. procedure TForm1.BguardarClick(Sender: TObject); var c:Ccd; d:Cdvd; begin if op.ItemIndex=0 then begin c:=Ccd.create; llenarcd(c); obj.setvectorcd(up.Position,c); if up.Position<obj.getnum-1 then begin up.Position:=up.Position+1; end; mostrar; alb.Clear; inte.Clear; com.Clear; dur.Clear; np.Clear; bus.clear; alb.SetFocus; end else if op.ItemIndex=1 then

begin d:=Cdvd.create; llenardvd(d); obj.setvectordvd(up.Position,d); if up.Position<obj.getnum-1 then begin up.Position:=up.Position+1; end; mostrar; titu.Clear; dire.Clear; pai.Clear; ddu.Clear; come.Clear; bus.Clear; titu.SetFocus; end; end; //implementacion del metodo buscar. procedure TForm1.BbuscarClick(Sender: TObject); var i:integer; begin If op.ItemIndex = 0 then begin i:=Obj.Buscarcd(Bus.Text); ListBox2.Items.Add('----------------------------------------------------------------');

ListBox2.Items.Add('Nombre del (Obj.getVectorCd(i).getTitulo)); ListBox2.Items.Add('Nombre del (Obj.getVectorcd(i).getnombre)); ListBox2.Items.Add('Numero de (Obj.getvectorcd(i).getduracion)); ListBox2.Items.Add('Tiempo de (Obj.getvectorcd(i).getnpistas)); ListBox2.Items.Add('Comentario (obj.getvectorcd(i).getcomentario));

album

'+

interprete

'+

Temas

'+

Duracion

'+

'+

ListBox2.Items.Add('----------------------------------------------------------------'); end else if op.ItemIndex = 1 then begin i:=Obj.Buscardvd(Bus.Text); ListBox2.Items.Add('----------------------------------------------------------------'); ListBox2.Items.Add('Titulo de (Obj.getVectordvd(i).getTitulo)); ListBox2.Items.Add('Nombre del (Obj.getVectordvd(i).getnombre)); ListBox2.Items.Add('Tiempo de (Obj.getVectordvd(i).getduracion)); ListBox2.Items.Add('Pais ListBox2.Items.Add('Comentario (obj.getvectordvd(i).getcomentario)); la pelicula : '+

director

'+

Duracion

'+

'+ (obj.getvectordvd(i).getpais)); : '+

ListBox2.Items.Add('----------------------------------------------------------------'); end; end;

procedure TForm1.FormCreate(Sender: TObject);

begin obj:=vectores.create; end;

procedure TForm1.FormShow(Sender: TObject); begin tam.SetFocus; end;

//metodo para bloquear los groupbox. procedure TForm1.opChange(Sender: TObject); begin if op.ItemIndex=0 then begin g1.Enabled:=true; g2.Enabled:=false; alb.SetFocus; end else begin g1.Enabled:=false; g2.Enabled:=true; titu.SetFocus; end; end;

//Implementacin del mtodo que muestra los elementos del vector de objetos en un TListBox. procedure TForm1.mostrar; var i:integer; begin ListBox1.Clear; if op.ItemIndex=0 then begin for i:= 0 to obj.getnum-1 do begin if obj.getvectorcd(i)<> nil then begin ListBox1.Items.Add('---------------------------------------------------'); ListBox1.Items.Add('Titulo del album: '+obj.getvectorcd(i).gettitulo); ListBox1.Items.Add('Interprete: '+obj.getvectorcd(i).getnombre); ListBox1.Items.Add('Duracion: '+obj.getvectorcd(i).getduracion); ListBox1.Items.Add('N de pistas: '+obj.getvectorcd(i).getnpistas); ListBox1.Items.Add('Comentario :'+obj.getvectorcd(i).getcomentario); ListBox1.Items.Add('---------------------------------------------------'); end; end; end else if op.ItemIndex = 1 then begin for i:=0 to obj.getnum -1 do

begin if obj.getvectordvd(i) <> nil then begin ListBox1.Items.Add('---------------------------------------------------'); ListBox1.Items.Add('Titulo de la pelicula: '+obj.getvectordvd(i).gettitulo); ListBox1.Items.Add('Interprete: '+obj.getvectordvd(i).getnombre); ListBox1.Items.Add('Duracion: '+obj.getvectordvd(i).getduracion); ListBox1.Items.Add('Pais: '+obj.getvectordvd(i).getpais); ListBox1.Items.Add('Comentario : '+obj.getvectordvd(i).getcomentario); ListBox1.Items.Add('---------------------------------------------------'); end; end; end; end;

procedure TForm1.llenarcd(c: Ccd); begin c.settitulo(alb.Text); c.setnombre(inte.Text); c.setduracion(dur.Text); c.setnpistas(np.Text); c.setcomentario(com.Text); end;

procedure TForm1.llenardvd(d: Cdvd); begin d.settitulo(titu.Text);

d.setnombre(dire.Text); d.setduracion(ddu.Text); d.setpais(pai.Text); d.setcomentario(come.Text); end;

initialization {$I Ugrafica.lrs}

end.

As queda el entorno grafico.

Vous aimerez peut-être aussi