Está en la página 1de 5

15/10/2015

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.

Paraentenderestosconceptosbsicosyladiferenciaentrelaprogramacinestructuradaharemosunprograma que nos permita


realizarlasumaymultiplicacindedosnmeroscomplejos,peroconelparadigmaorientadoaobjetos,Para ellos usaremos las
etapasvistasenelcaptulo1.4.

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

ParteReal. Ser el lugar en


donde se almacenar la parte
realdeunnumerocomplejo.
ParteImag. Ser el lugar en
donde se almacenar la parte
imaginaria de un numero
complejo.

ObtReal. Se encargar de obtener la parte real de un numero


complejo.
ObtImag. Se encargar de obtener la parte imaginaria de un
numerocomplejo.
PonReal. Se encargar de poner la parte real de un numero
complejoenParteReal.
PonImag. Se encargar de poner la parte imaginaria de un
numerocomplejoenParteImag.
ObtCad.Seencargardeconvertirelnumerocomplejoenuna
cadenadecaracteressiguiendoelformato:a+bi.
PonCad. Se encargar de convertir una cadena de caracteres
enelformatoa+bi,aunnumerocomplejo.
Adicin. Permite sumarlo con otro numero complejo,
reemplazando el actual. Multiplicacin.Permite multiplicarlo
conotronumerocomplejo,reemplazandoelactual.

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

PORTADA| LIBROS| APUNTES| ARTCULOS

Todoslostextos,imgenesyvideosdeConoce3000estancolocadosbajounalicencia:
CreativeCommonsReconocimientoNoComercial3.0UnportedLicense.

http://www.conoce3000.com/html/espaniol/Libros/PascalConFreePascal/Cap1002Un%20programa%20de%20ejemplo.php

5/5

También podría gustarte