Conoce300 __ Pascal Con Free Pascal __ Introducción a La Programación Orientada a Objetos I __ Un...
description
Transcript of Conoce300 __ Pascal Con Free Pascal __ Introducción a La Programación Orientada a Objetos I __ Un...
-
15/10/2015 Conoce300::PascalconFreePascal::IntroduccinalaprogramacinorientadaaobjetosI::Unprogramadeejemplo
http://www.conoce3000.com/html/espaniol/Libros/PascalConFreePascal/Cap1002Un%20programa%20de%20ejemplo.php 1/5
PASCALCONFREEPASCAL
10.IntroduccinalaprogramacinorientadaaobjetosI.
10.2.Unprogramadeejemplo.anterior::indice::siguiente10.1.QueslaprogramacinOrientadaaObjetos?.10.2.Unprogramadeejemplo.10.3.ConstructoresyDestructores.10.4.SobrecargademtodosPolimorfismoporsobrecarga.
10.5.HerenciaPolimorfismoporsobreescrituraCompatibilidadentreobjetos.10.6.Encapsulacin(Private,Strictprivate,Protected,StrictProtected,Public).10.7.Polimorfismoporsobreescrituraconenlaceposterior.
10.8.Parametrosopcionalesyusodeself.10.9.Preguntasyejercicios.10.10.Respuestaalaspreguntasyejercicios.
Paraentenderestosconceptosbsicosyladiferenciaentrelaprogramacinestructuradaharemosunprogramaquenospermitarealizar lasumaymultiplicacindedosnmeroscomplejos,peroconelparadigmaorientadoaobjetos,Paraellosusaremos lasetapasvistasenelcaptulo1.4.
Enunciado: "Sedeseahacerunprogramaquenospermitasumarymultiplicardosnmeroscomplejosy losmuestreporpantalla."
Analisis.
En esta parte se debe definir los tipos de objetos o clases, que intervienen, a grandes rasgos tenemos: El NmeroComplejo,ylaConsolaqueestcompuestaporeltecladoylapantalla,queseimplementarndirectamenteconlasrutinaswriteowritelny reado readln.Parael tipodeobjetoNumeroComplejo,debemosdefinirsusatributosycomportamiento.Conlocualtenemoslosiguiente:TipodeObjetooClase Atributos Comportamiento
NumeroComplejo ParteReal. Ser el lugar endonde se almacenar la parterealdeunnumerocomplejo.ParteImag. Ser el lugar endonde se almacenar la parteimaginaria de un numerocomplejo.
ObtReal.Se encargar de obtener la parte real de un numerocomplejo.ObtImag. Se encargar de obtener la parte imaginaria de unnumerocomplejo.PonReal. Se encargar de poner la parte real de un numerocomplejoenParteReal.PonImag. Se encargar de poner la parte imaginaria de unnumerocomplejoenParteImag.ObtCad.Seencargardeconvertirelnumerocomplejoenunacadenadecaracteressiguiendoelformato:a+bi.PonCad.Seencargardeconvertirunacadenadecaracteresenelformatoa+bi,aunnumerocomplejo.Adicin. Permite sumarlo con otro numero complejo,reemplazando el actual. Multiplicacin.Permite multiplicarloconotronumerocomplejo,reemplazandoelactual.
Diseo.
Enestapartesecreanlosalgoritmosquedefinenelcomportamientodeuntipodeobjetooclase,losobjetosqueseusarnyelalgoritmoquedefinirlainteraccinentrelosobjetos.Para crear los algoritmosquedefinenel comportamiento de los tipos de objetos ya definidos en el anlisis, usamos lossiguientesPseudocdigos:
TipodeObjetooClase Comportamiento Algoritmos
NumeroComplejo ObtReal. InicioObtReal:=ParteRealFin
LENGUAJESDEPROGRAMACIN
TrabajaenKiaAccedeasusofertasdeempleo.Checalasvacantesypostlate.
-
15/10/2015 Conoce300::PascalconFreePascal::IntroduccinalaprogramacinorientadaaobjetosI::Unprogramadeejemplo
http://www.conoce3000.com/html/espaniol/Libros/PascalConFreePascal/Cap1002Un%20programa%20de%20ejemplo.php 2/5
ObtImag. InicioObtImag:=ParteImagFin
PonReal(n:double). InicioParteReal:=nFin
PonImag(n:double). InicioParteImag:=nFin
ObtCad(dec).dec, indica los decimales que sequierenusar.
InicioStr(ParteReal:0:dec,aux1)Str(ParteImag:0:dec,aux2)ObtCad:=aux1+'+'+aux2+'i'Fin
PonCad(n:string). Inicioaux:=nParteReal:=0ParteImag:=0error:=0if(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'entoncesdelete(aux,length(aux),1)Siaux[length(aux)]in['0'..'9']entoncesi:=length(aux)encontro:=falsop:=0Mientras(noencontro)y(i>1)hacerSiaux[i]='+'oaux[i]=''entoncesencontro=verdaderop=iFinSii=i1FinMientrasPR:=Copy(aux,1,p1)delete(aux,1,p1)PI:=auxVal(PR,ParteReal,error)Val(PI,ParteImag,error)Sierror0entoncesParteReal:=0ParteImag:=0FinSiCasocontrarioVal(aux,ParteReal,error)FinSiFinSiPonCad:=errorFin
Adicin(n:NumeroComplejo). InicioPonReal(ObtReal+n.ObtReal)PonImag(ObtImag+n.ObtImag)Fin
Multiplicacin(n:NumeroComplejo). InicioPonReal((ObtReal*n.ObtReal)(ObtImag*n.ObtImag))PonImag((ObtReal*n.ObtImag)+(ObtImag*n.ObtReal))Fin
Debidoaqueelenunciadonospidesumarymultiplicardosnmeros,entoncessedebendefinir3objetosdeltipodeobjetonmerocomplejo,Numero01,Numero02yResultado.Paralasolucindelproblema,esdecirparalainteraccinentrelosobjetos,elalgoritmoseraelsiguiente:InicioNumero01.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))FinEnlosalgoritmos,tantoparaelcomportamientodelostiposdeobjetosoclases,yparalasolucindelproblema,estamosusandoelpuntoparareferirnosalosmtodosqueseusanencadaobjeto.
Implementacin
Enlaimplementacindenuestroprogramaseharusodeladirectivadecompilacin:{$modeobjfpc},quenospermiteusarlasopcionesdelaprogramacinOrientadaaObjetos,queofreceelcompilador.Ademsalusarestadirectiva,esteincluyepordefectolaunidadobjpasautomticamentedespusdecargarlaunidadsystem,unadelasconsecuenciasdeincluirla
-
15/10/2015 Conoce300::PascalconFreePascal::IntroduccinalaprogramacinorientadaaobjetosI::Unprogramadeejemplo
http://www.conoce3000.com/html/espaniol/Libros/PascalConFreePascal/Cap1002Un%20programa%20de%20ejemplo.php 3/5
unidadobjpasesqueeltipodedatointegertendruntamaode4bytes.Hayquetenerpresentequelosparmetrosdeunmtodo(funcinoprocedimiento)nodebentenerelmismonombrequeelatributodeunaclase.LaimplementacindelEjemploseharusandounidadesendondelaunidadComplejos.pp,contendrladefinicindeltipodeobjetooClaseTComplejo.ElprogramaestarenelarchivoSumMul.pp.Acontinuacin,loscdigosfuentecorrespondientes:
{$codepageutf8}{$modeobjfpc}
UNITComplejos;INTERFACE
TYPETComplejo=CLASSParteReal,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;BEGINObtReal:=ParteRealEND;
FUNCTIONTComplejo.ObtImag:double;BEGINObtImag:=ParteImagEND;
PROCEDURETComplejo.PonReal(n:double);BEGINParteReal:=n;END;
PROCEDURETComplejo.PonImag(n:double);BEGINParteImag:=nEND;
FUNCTIONTComplejo.ObtCad(dec:integer):string;VARaux1,aux2,p:string;BEGINp:='';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;BEGINaux:=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'THENBEGINdelete(aux,length(aux),1);IFaux[length(aux)]IN['0'..'9']THENBEGINi:=length(aux);encontro:=FALSE;p:=0;WHILE(NOTencontro)AND(i>1)DOBEGINIF(aux[i]='+')OR(aux[i]='')THENBEGINencontro:=TRUE;p:=iEND;i:=i1END;PR:=Copy(aux,1,p1);delete(aux,1,p1);PI:=aux;Val(PR,ParteReal,error);Val(PI,ParteImag,error);
-
15/10/2015 Conoce300::PascalconFreePascal::IntroduccinalaprogramacinorientadaaobjetosI::Unprogramadeejemplo
http://www.conoce3000.com/html/espaniol/Libros/PascalConFreePascal/Cap1002Un%20programa%20de%20ejemplo.php 4/5
IFerror0THENBEGINParteReal:=0;ParteImag:=0ENDEND;ENDELSEBEGINVal(aux,ParteReal,error);END;PonCad:=errorEND;
PROCEDURETComplejo.Adicion(n:TComplejo);BEGINPonReal(ObtReal+n.ObtReal);PonImag(ObtImag+n.ObtImag)END;
PROCEDURETComplejo.Multiplicacion(n:TComplejo);VARPR,PI:double;BEGINPR:=(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;BEGINNumero01:=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,conladiferenciadequeestepermiteincluirrutinasdentrodesuestructura.Lasclasesenunaunidad,sedefinendentrode laseccinde interfaz,yelcdigode losmtodos,seescribeen laseccindeimplementacin.Alimplementarelmtododeunaclase,esteseimplementademodosimilaracomoseimplementaunafuncinoprocedimiento,perocolocandoelnombredelaclaseenelnombredelafuncinoprocedimiento,separadoporunpunto.Enelprogramaquesumalosnmeroscomplejos,losobjetosNumero01,Numero02yResultadosedefinencomovariablesdelaclase TComplejo. Los objetos que se definen en el programa necesitan ser creados, es por ello que se hace uso del mtodoCreate,quetodaclasetienepordefectooporomisin.Estemtodoseencargadecrearelobjetoparaserusadomsadelanteenelprograma.Enrealidadunobjeto,esunpunteroaunobjetoquesecreaenelmontculo,yelmtodoCreateseencargadecrearelobjetoenelmontculo.ElmtodoCreateseconocecomounconstructor.Tambin se debe tener presente que losmtodos de una clase, pueden tener como uno de sus parmetros, a un objeto de lapropiaclase,enesteejemplosepuedeobservarquelosmtodosAdicinyMultiplicacin,tienenelparmetron,queesunobjetodelaclaseTComplejo.Porotrolado,losatributosnosepuedenusarcomounavariabledecontrolenunbucleForTodooForDowntodo.SisenecesitausarunbucleFordentrodeunmtodo,entonces lavariabledecontroldelbuclesedebedeclarardentrodelmtodo,comounavariablelocaloensudefectousarunaestructuraRepeatuntiloWhiledo,odeclararunatributodeclase,quesonatributosquesecomportancomovariablesglobales,estosevermsadelante.LosatributosnosepuedenusarcomovariablesdecontroldebidoaqueunbucleFor,sloadmiteunavariableglobalounavariablelocalparausarlocomounavariabledecontrol,yunatributonoesenrealidadunavariable,sinomasbienesuncampoqueperteneceaunaclase,algoparecidoa losregistros,endonde loscamposdeunregistrotampocosepuedenusarcomovariabledecontroldeunbucleFor.ltimarevisin:11/12/2013.
-
15/10/2015 Conoce300::PascalconFreePascal::IntroduccinalaprogramacinorientadaaobjetosI::Unprogramadeejemplo
http://www.conoce3000.com/html/espaniol/Libros/PascalConFreePascal/Cap1002Un%20programa%20de%20ejemplo.php 5/5
Tweet 0
anterior::indice::siguiente
SUGERENCIAS
"Agradezco que se tomen su tiempo, para escribirme una sugerencia. Toda sugerencia que meescribameayudaamejorarloscontenidosdelawebacordeasusnecesidades.Lassugerencias,serecibirn siempre y cuando ingrese al menos su nombre o seudnimo y la sugerencia. LassugerenciassondeusointernoynosernpublicadasenlawebConoce3000"Nombreoseudnimo :
CorreoElectrnico :Sugerencias :
Deseorecibirunacopiadelmensaje. Enviar
PORTADA|LIBROS|APUNTES|ARTCULOS
Todoslostextos,imgenesyvideosdeConoce3000estancolocadosbajounalicencia:CreativeCommonsReconocimientoNoComercial3.0UnportedLicense.
0Recomendar