Вы находитесь на странице: 1из 5

15/10/2015 Conoce300::PascalconFreePascal::IntroduccinalaprogramacinorientadaaobjetosI::Encapsulacin(Private,Strictprivate,Protected,StrictPr

LENGUAJESDEPROGRAMACIN

PASCALCONFREEPASCAL
TrabajaenTVAzteca

Accedeasusofertasdeempleo.
Checalasvacantesypostlate.

10.IntroduccinalaprogramacinorientadaaobjetosI.

10.6.Encapsulacin(Private,Strictprivate,Protected,StrictProtected,Public).

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.

La encapsulacin nos permite organizar los atributos y mtodos de una clase evitando el acceso a los mismos. Esto permite
mantener la integridad y funcionamiento correcto de la clase cuando este es usado por otro programador. S dejamos que los
atributosymtodosdeunaclaseestnalalcancedetodos,lasaccionesreciprocasquetendrnentresilosobjetossernmuy
engorrososyavecesdifcildeestablecer.
Muchas veces la necesidad de evitar el acceso a los atributos y mtodos de una clase se ha interpretado mal, como si
estuviramosocultandoinformacinprivilegiadaqueotrosprogramadoresnomerecenconocer.Peroloquesebuscaesreducirla
complejidadenlareutilizacindeunaclase.
La encapsulacin se implementa en freepascal con secciones, usando las siguientes palabras reservadas: public, private, strict
private,protected.
Public.Losatributosymtodosdefinidosaqusonaccesiblesporcualquierclasedescendienteyqueseencuentreenla
unidad o en otra unidad, y tambin por los objetos que se crean con la clase. Cuando no se define ninguna seccin en la
claseentoncestodossusatributosymtodospertenecenalaseccinpublic.
Private. Los atributos y mtodos definidos aqu son accesibles slo por la misma clase y cualquier clase descendiente
queseencuentreenlamismaunidad,losobjetosquesecreanconlaclasenotienenaccesoaestaseccin,aexcepcin
delosqueseencuentranenlamismaunidad.
Strict Private. Los atributos y mtodos definidos aqu son accesibles slo por la clase misma. Ninguna clase
descendientepodraccederaellos,losobjetosquesecreanconlaclasenotienenaccesoaestaseccin,sinimportarsi
elobjetoestaenlamismaunidad.
Protected.Losatributosymtodosdefinidosaqusonaccesiblessloporlamismaclaseycualquierclasedescendiente
que se encuentre en la misma unidad o en otra unidad, los objetos que se crean con la clase no tienen acceso a esta
seccin,aexcepcindelosqueseencuentranenlamismaunidad.
Strict Protected. Los atributos y mtodos definidos aqu son accesibles slo por la misma clase y cualquier clase
descendiente que se encuentre en la misma unidad o en otra unidad, los objetos que se crean con esta clase no tienen
accesoaestaseccin,sinimportarsielobjetoestaenlamismaunidad.
Pueden haber varias secciones en una clase, definidas en el orden que uno prefiere, pero dentro de cada seccin primero se
debencolocarlosatributosydespuslosmtodos.
Lasiguienteunidadyprograma,esunejemplodelusodealgunasdeestassecciones.

{$codepageutf8}
{$modeobjfpc}
UNITUClase01;
INTERFACE
USESsysutils;
TYPE
TClase01=CLASS
//cualquierclasedescendienteyobjetotienenacceso
CONSTRUCTORCrear(n:integer);
STRICTPRIVATE
//ningunaclasedescendienteyobjetotienenacceso
B01:integer;
PROTECTED
//cualquierclasedescendientetieneaccesoinclusolosqueestan

http://www.conoce3000.com/html/espaniol/Libros/PascalConFreePascal/Cap1006Encapsulacion%20(privatestrict%20privateprotectedstrict%20protected

1/5

15/10/2015 Conoce300::PascalconFreePascal::IntroduccinalaprogramacinorientadaaobjetosI::Encapsulacin(Private,Strictprivate,Protected,StrictPr
//enotraunidad,losobjetosnotienenaccesosiestanenotraunidad.
FUNCTIONFormato:string;
PRIVATE
//cualquierclasedescendientequesloesteenlamisma
//unidadtieneacceso,losobjetosnotienenaccesosiestanenotraunidad.
C01:integer;
PUBLIC
//SecreaObtenerB01paraqueelmtodoFormatodeTClase02
//puedaaccederaB01demodoindirecto.
FUNCTIONObtenerB01:integer;
PROCEDUREMostrar;
END;
TClase02=CLASS(TClase01)
PROTECTED
FUNCTIONFormato:string;
PUBLIC
PROCEDUREMostrar;
END;
IMPLEMENTATION

CONSTRUCTORTClase01.Crear(n:integer);
BEGIN
B01:=n;
C01:=n
END;
FUNCTIONTClase01.Formato:string;
BEGIN
Formato:='Estaclasetiene='+IntToStr(B01)+#13+#10+'C01='+IntToStr(C01)
END;
FUNCTIONTClase01.ObtenerB01:integer;
BEGIN
ObtenerB01:=B01
END;
PROCEDURETClase01.Mostrar;
BEGIN
Writeln(Formato)
END;
FUNCTIONTClase02.Formato:string;
//TClase02.Formato,puedeaccederalcampoC01porqueestaenprivate.
//PeroparaaccederaB01sedebeusarelmtodoObtenerB01,porque
//B01estaenstrictprivate
//SilaclaseTClase02estuvieraenotraunidad,entonces
//enlaclaseTClase01sedebecrearunmtodoquenospermita
//accederalcampoC01.
BEGIN
Formato:='Estaotraclasetiene='+IntToStr(ObtenerB01)+
#13+#10+'C01='+IntToStr(C01)
END;
PROCEDURETClase02.Mostrar;
BEGIN
Writeln(Formato);
END;
END.

Cdigofuente13:UnidadUclase01.ppconlasclasesTClase01yTClase02.

{$codepageutf8}
{$modeobjfpc}
USESUClase01;
VARA:TClase01;
B:TClase02;

BEGIN
A:=TClase01.crear(10);
A.Mostrar;
B:=TClase02.crear(5);
B.Mostrar
END.

Cdigofuente14:ProgramaqueusalasclasesTClase01yTClase02.

Cmo se puede observar, las clsaes TClase01 y TClase02, tienen el mtodo llamado Formato, el mtodo Formato de la clase
TClase02,accedealcampoB01delaclaseTClase01,atravsdelmtodoObtenerB01,estoesdebidoaqueelcampoB01se
encuentraenunaseccinStrictPrivate.PeroelcampoC01alencontrarseenunaseccinprivate,sepuedeacceder usando su
nombredirectamente.
Pero si la clase TClase02, se implementa en una unidad aparte, entonces se har necesario crear un mtodo que nos permite
obtenerelvalordeC01,yaquelosatributosymtodosdeunaseccinprivate,slosonaccesiblessilaclaseseimplementaen

http://www.conoce3000.com/html/espaniol/Libros/PascalConFreePascal/Cap1006Encapsulacion%20(privatestrict%20privateprotectedstrict%20protected

2/5

15/10/2015 Conoce300::PascalconFreePascal::IntroduccinalaprogramacinorientadaaobjetosI::Encapsulacin(Private,Strictprivate,Protected,StrictPr
lamismaunidad.
ContinuandoconelejemplodelasclasesTComplejoyTReal,procedemosaencapsularlosatributosdelaclaseTComplejocomo
privados (private), pero haciendo un cambio en el mtodo ObtCad de TReal, ya que este accede al atributo ParteReal
directamente.Acontinuacinlasclasesconloscambioscorrespondientes:

{$codepageutf8}
{$modeobjfpc}
UNITComplejos;
INTERFACE
TYPE
TComplejo=CLASS
PRIVATE
ParteReal,ParteImag:double;
PUBLIC
CONSTRUCTORCrear(i:double);//Creaunimaginariopuro
CONSTRUCTORCrear(r,i: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
CONSTRUCTORTComplejo.Crear(i:double);
BEGIN
ParteReal:=0;
ParteImag:=i
END;
CONSTRUCTORTComplejo.Crear(r,i:double);
BEGIN
ParteReal:=r;
ParteImag:=i;
END;
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

http://www.conoce3000.com/html/espaniol/Libros/PascalConFreePascal/Cap1006Encapsulacion%20(privatestrict%20privateprotectedstrict%20protected

3/5

15/10/2015 Conoce300::PascalconFreePascal::IntroduccinalaprogramacinorientadaaobjetosI::Encapsulacin(Private,Strictprivate,Protected,StrictPr
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);
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.

Cdigofuente15:ClaseTComplejoconseccionesprivateypublic.

{$codepageutf8}
{$modeobjfpc}
UNITReales;
INTERFACE
USESComplejos;
TYPE
TReal=CLASS(TComplejo)
CONSTRUCTORCrear(r:double);
FUNCTIONObtCad(dec:integer):string;
END;

IMPLEMENTATION
CONSTRUCTORTReal.Crear(r:double);
BEGIN
inheritedCrear(r,0);
END;

FUNCTIONTReal.ObtCad(dec:integer):string;
VARp:string;
BEGIN
Str(ObtReal:0:dec,p);
ObtCad:=p
END;
END.

Cdigofuente16:ClaseTRealconseccionesprivateypublic.

ltimarevisin:05/11/2013.

Recomendar

Tweet

anterior::indice::siguiente

http://www.conoce3000.com/html/espaniol/Libros/PascalConFreePascal/Cap1006Encapsulacion%20(privatestrict%20privateprotectedstrict%20protected

4/5

15/10/2015 Conoce300::PascalconFreePascal::IntroduccinalaprogramacinorientadaaobjetosI::Encapsulacin(Private,Strictprivate,Protected,StrictPr

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/Cap1006Encapsulacion%20(privatestrict%20privateprotectedstrict%20protected

5/5

Вам также может понравиться