Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Conoce300 - Pascal Con Free Pascal - Introducción A La Programación Orientada A Objetos I - Un Programa de Ejemplo
Conoce300 - Pascal Con Free Pascal - Introducción A La Programación Orientada A Objetos I - Un Programa de Ejemplo
Conoce300::PascalconFreePascal::IntroduccinalaprogramacinorientadaaobjetosI::Unprogramadeejemplo
LENGUAJESDEPROGRAMACIN
PASCALCONFREEPASCAL
TrabajaenKia
Accedeasusofertasdeempleo.
Checalasvacantesypostlate.
10.IntroduccinalaprogramacinorientadaaobjetosI.
10.2.Unprogramadeejemplo.
anterior::indice::siguiente
10.1.QueslaprogramacinOrientadaa
10.5.HerenciaPolimorfismoporsobreescritura
10.8.Parametrosopcionalesyusodeself.
Objetos?.
Compatibilidadentreobjetos.
10.9.Preguntasyejercicios.
10.2.Unprogramadeejemplo.
10.6.Encapsulacin(Private,Strictprivate,
10.10.Respuestaalaspreguntasyejercicios.
10.3.ConstructoresyDestructores.
Protected,StrictProtected,Public).
10.4.SobrecargademtodosPolimorfismopor
10.7.Polimorfismoporsobreescrituraconenlace
sobrecarga.
posterior.
Enunciado: "Se desea hacer un programa que nos permita sumar y multiplicar dos nmeros complejos y los muestre por
pantalla."
Analisis.
En esta parte se debe definir los tipos de objetos o clases, que intervienen, a grandes rasgos tenemos: El Nmero
Complejo,ylaConsolaqueestcompuestaporeltecladoylapantalla,queseimplementarndirectamenteconlasrutinas
write o writeln y read o readln. Para el tipo de objeto Numero Complejo, debemos definir sus atributos y comportamiento.
Conlocualtenemoslosiguiente:
TipodeObjetooClase
NumeroComplejo
Atributos
Comportamiento
Diseo.
Enestapartesecreanlosalgoritmosquedefinenelcomportamientodeuntipodeobjetooclase,losobjetosqueseusarn
yelalgoritmoquedefinirlainteraccinentrelosobjetos.
Para crear los algoritmos que definen el comportamiento de los tipos de objetos ya definidos en el anlisis, usamos los
siguientesPseudocdigos:
TipodeObjetoo
Clase
NumeroComplejo
Comportamiento
ObtReal.
Algoritmos
Inicio
ObtReal:=ParteReal
Fin
http://www.conoce3000.com/html/espaniol/Libros/PascalConFreePascal/Cap1002Un%20programa%20de%20ejemplo.php
1/5
15/10/2015
Conoce300::PascalconFreePascal::IntroduccinalaprogramacinorientadaaobjetosI::Unprogramadeejemplo
ObtImag.
Inicio
ObtImag:=ParteImag
Fin
PonReal(n:double).
Inicio
ParteReal:=n
Fin
PonImag(n:double).
Inicio
ParteImag:=n
Fin
ObtCad(dec).
Inicio
dec, indica los decimales que se Str(ParteReal:0:dec,aux1)
quierenusar.
Str(ParteImag:0:dec,aux2)
ObtCad:=aux1+'+'+aux2+'i'
Fin
PonCad(n:string).
Inicio
aux:=n
ParteReal:=0
ParteImag:=0
error:=0
if(aux[length(aux)]='i')y(Not(aux[length(aux)1]in['0'..'9']))
entoncesaux:=Copy(aux,1,length(aux)1)+'1i'
Siaux[length(aux)]='i'entonces
delete(aux,length(aux),1)
Siaux[length(aux)]in['0'..'9']entonces
i:=length(aux)
encontro:=falso
p:=0
Mientras(noencontro)y(i>1)hacer
Siaux[i]='+'oaux[i]=''entonces
encontro=verdadero
p=i
FinSi
i=i1
FinMientras
PR:=Copy(aux,1,p1)
delete(aux,1,p1)
PI:=aux
Val(PR,ParteReal,error)
Val(PI,ParteImag,error)
Sierror<>0entonces
ParteReal:=0
ParteImag:=0
FinSi
Casocontrario
Val(aux,ParteReal,error)
FinSi
FinSi
PonCad:=error
Fin
Adicin(n:NumeroComplejo).
Inicio
PonReal(ObtReal+n.ObtReal)
PonImag(ObtImag+n.ObtImag)
Fin
Multiplicacin(n:NumeroComplejo).
Inicio
PonReal((ObtReal*n.ObtReal)(ObtImag*n.ObtImag))
PonImag((ObtReal*n.ObtImag)+(ObtImag*n.ObtReal))
Fin
Debidoaqueelenunciadonospidesumarymultiplicardosnmeros,entoncessedebendefinir3objetosdeltipodeobjeto
nmerocomplejo,Numero01,Numero02yResultado.Paralasolucindelproblema,esdecirparalainteraccinentrelos
objetos,elalgoritmoseraelsiguiente:
Inicio
Numero01.PonReal(4)
Numero01.PonImag(3)
Numero02.PonReal(6)
Numero02.PonImag(2)
Resultado.PonReal(Numero01.ObtReal)
Resultado.PonImag(Numero01.ObtImag)
Resultado.Adicion(Numero02)
Escribir(Resultado.ObtCad(4))
Resultado.PonReal(Numero01.ObtReal)
Resultado.PonImag(Numero01.ObtImag)
Resultado.Multiplicacion(Numero02)
Escribir(Resultado.ObtCad(4))
Fin
Enlosalgoritmos,tantoparaelcomportamientodelostiposdeobjetosoclases,yparalasolucindelproblema,estamos
usandoelpuntoparareferirnosalosmtodosqueseusanencadaobjeto.
Implementacin
Enlaimplementacindenuestroprogramaseharusodeladirectivadecompilacin:{$modeobjfpc},quenospermiteusar
lasopcionesdelaprogramacinOrientadaaObjetos,queofreceelcompilador.Ademsalusarestadirectiva,esteincluye
pordefectolaunidadobjpasautomticamentedespusdecargarlaunidadsystem,unadelasconsecuenciasdeincluirla
http://www.conoce3000.com/html/espaniol/Libros/PascalConFreePascal/Cap1002Un%20programa%20de%20ejemplo.php
2/5
15/10/2015
Conoce300::PascalconFreePascal::IntroduccinalaprogramacinorientadaaobjetosI::Unprogramadeejemplo
unidadobjpasesqueeltipodedatointegertendruntamaode4bytes.Hayquetenerpresentequelosparmetrosdeun
mtodo(funcinoprocedimiento)nodebentenerelmismonombrequeelatributodeunaclase.
LaimplementacindelEjemploseharusandounidadesendondelaunidadComplejos.pp,contendrladefinicindeltipo
deobjetooClaseTComplejo.ElprogramaestarenelarchivoSumMul.pp.Acontinuacin,loscdigosfuente
correspondientes:
{$codepageutf8}
{$modeobjfpc}
UNITComplejos;
INTERFACE
TYPE
TComplejo=CLASS
ParteReal,ParteImag:double;
FUNCTIONObtReal:double;
FUNCTIONObtImag:double;
PROCEDUREPonReal(n:double);
PROCEDUREPonImag(n:double);
FUNCTIONObtCad(dec:integer):string;
FUNCTIONPonCad(n:string):integer;
PROCEDUREAdicion(n:TComplejo);
PROCEDUREMultiplicacion(n:TComplejo);
END;
IMPLEMENTATION
FUNCTIONTComplejo.ObtReal:double;
BEGIN
ObtReal:=ParteReal
END;
FUNCTIONTComplejo.ObtImag:double;
BEGIN
ObtImag:=ParteImag
END;
PROCEDURETComplejo.PonReal(n:double);
BEGIN
ParteReal:=n;
END;
PROCEDURETComplejo.PonImag(n:double);
BEGIN
ParteImag:=n
END;
FUNCTIONTComplejo.ObtCad(dec:integer):string;
VARaux1,aux2,p:string;
BEGIN
p:='';
Str(ParteReal:0:dec,aux1);
Str(ParteImag:0:dec,aux2);
IFParteImag>=0THENp:='+';
ObtCad:=aux1+p+aux2+'i';
END;
FUNCTIONTComplejo.PonCad(n:string):integer;
VARaux:string;
p,i,error:integer;
PR,PI:string;
encontro:boolean;
BEGIN
aux:=n;
ParteReal:=0;
ParteImag:=0;
error:=0;
IF(aux[length(aux)]='i')AND(NOT(aux[length(aux)1]IN['0'..'9']))
THENaux:=Copy(aux,1,length(aux)1)+'1i';
IFaux[length(aux)]='i'THEN
BEGIN
delete(aux,length(aux),1);
IFaux[length(aux)]IN['0'..'9']
THENBEGIN
i:=length(aux);
encontro:=FALSE;
p:=0;
WHILE(NOTencontro)AND(i>1)DO
BEGIN
IF(aux[i]='+')OR(aux[i]='')
THENBEGIN
encontro:=TRUE;
p:=i
END;
i:=i1
END;
PR:=Copy(aux,1,p1);
delete(aux,1,p1);
PI:=aux;
Val(PR,ParteReal,error);
Val(PI,ParteImag,error);
http://www.conoce3000.com/html/espaniol/Libros/PascalConFreePascal/Cap1002Un%20programa%20de%20ejemplo.php
3/5
15/10/2015
Conoce300::PascalconFreePascal::IntroduccinalaprogramacinorientadaaobjetosI::Unprogramadeejemplo
IFerror<>0THEN
BEGIN
ParteReal:=0;
ParteImag:=0
END
END;
END
ELSE
BEGIN
Val(aux,ParteReal,error);
END;
PonCad:=error
END;
PROCEDURETComplejo.Adicion(n:TComplejo);
BEGIN
PonReal(ObtReal+n.ObtReal);
PonImag(ObtImag+n.ObtImag)
END;
PROCEDURETComplejo.Multiplicacion(n:TComplejo);
VARPR,PI:double;
BEGIN
PR:=(ObtReal*n.ObtReal)(ObtImag*n.ObtImag);
PI:=(ObtReal*n.ObtImag)+(ObtImag*n.ObtReal);
PonReal(PR);
PonImag(PI)
END;
END.
Cdigofuente1:UnidadComplejos.pp.
{$codepageutf8}
{$modeobjfpc}
USESComplejos;
VARNumero01,Numero02,Resultado:TComplejo;
BEGIN
Numero01:=TComplejo.Create;
Numero02:=TComplejo.Create;
Resultado:=TComplejo.Create;
Numero01.PonReal(3);
Numero01.PonImag(5);
Numero02.PonReal(5);
Numero02.PonImag(2);
Resultado.PonReal(Numero01.ObtReal);
Resultado.PonImag(Numero01.ObtImag);
Resultado.Adicion(Numero02);
Writeln(Resultado.ObtCad(0));
Resultado.PonReal(Numero01.ObtReal);
Resultado.PonImag(Numero01.ObtImag);
Resultado.Multiplicacion(Numero02);
Writeln(Resultado.ObtCad(0));
END.
Cdigofuente2:ProgramaSumMul.pp
Talcomoyaseexplic,ladefinicindeunaclaseenfreepascalesmuysimilaraladeunregistro,conladiferenciadequeeste
permiteincluirrutinasdentrodesuestructura.
Las clases en una unidad, se definen dentro de la seccin de interfaz, y el cdigo de los mtodos, se escribe en la seccin de
implementacin.
Alimplementarelmtododeunaclase,esteseimplementademodosimilaracomoseimplementaunafuncinoprocedimiento,
perocolocandoelnombredelaclaseenelnombredelafuncinoprocedimiento,separadoporunpunto.
Enelprogramaquesumalosnmeroscomplejos,losobjetosNumero01,Numero02yResultadosedefinencomovariablesdela
clase TComplejo. Los objetos que se definen en el programa necesitan ser creados, es por ello que se hace uso del mtodo
Create,quetodaclasetienepordefectooporomisin.Estemtodoseencargadecrearelobjetoparaserusadomsadelanteen
elprograma.Enrealidadunobjeto,esunpunteroaunobjetoquesecreaenelmontculo,yelmtodoCreateseencargadecrear
elobjetoenelmontculo.ElmtodoCreateseconocecomounconstructor.
Tambin se debe tener presente que los mtodos de una clase, pueden tener como uno de sus parmetros, a un objeto de la
propiaclase,enesteejemplosepuedeobservarquelosmtodosAdicinyMultiplicacin,tienenelparmetron,queesunobjeto
delaclaseTComplejo.
Porotrolado,losatributosnosepuedenusarcomounavariabledecontrolenunbucleForTodooForDowntodo.Sisenecesita
usar un bucle For dentro de un mtodo, entonces la variable de control del bucle se debe declarar dentro del mtodo, como una
variablelocaloensudefectousarunaestructuraRepeatuntiloWhiledo,odeclararunatributodeclase,quesonatributosquese
comportancomovariablesglobales,estosevermsadelante.Losatributosnosepuedenusarcomovariablesdecontroldebido
aqueunbucleFor,sloadmiteunavariableglobalounavariablelocalparausarlocomounavariabledecontrol,yunatributono
es en realidad una variable, si no mas bien es un campo que pertenece a una clase, algo parecido a los registros, en donde los
camposdeunregistrotampocosepuedenusarcomovariabledecontroldeunbucleFor.
ltimarevisin:11/12/2013.
http://www.conoce3000.com/html/espaniol/Libros/PascalConFreePascal/Cap1002Un%20programa%20de%20ejemplo.php
4/5
15/10/2015
Conoce300::PascalconFreePascal::IntroduccinalaprogramacinorientadaaobjetosI::Unprogramadeejemplo
Recomendar
Tweet
anterior::indice::siguiente
SUGERENCIAS
"Agradezco que se tomen su tiempo, para escribirme una sugerencia. Toda sugerencia que me
escribameayudaamejorarloscontenidosdelawebacordeasusnecesidades.Lassugerencias,se
recibirn siempre y cuando ingrese al menos su nombre o seudnimo y la sugerencia. Las
sugerenciassondeusointernoynosernpublicadasenlawebConoce3000"
Nombreoseudnimo
CorreoElectrnico
Sugerencias
Deseorecibirunacopiadelmensaje.
Enviar
Todoslostextos,imgenesyvideosdeConoce3000estancolocadosbajounalicencia:
CreativeCommonsReconocimientoNoComercial3.0UnportedLicense.
http://www.conoce3000.com/html/espaniol/Libros/PascalConFreePascal/Cap1002Un%20programa%20de%20ejemplo.php
5/5