Conoce300 __ Pascal Con Free Pascal __ Introducción a La Programación Orientada a Objetos I __ Un...

download Conoce300 __ Pascal Con Free Pascal __ Introducción a La Programación Orientada a Objetos I __ Un Programa de Ejemplo

of 5

description

, ,m

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