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

4
15/10/2015 Conoce300 :: Pascal con Free Pascal :: Introducción a la programación orientada a objetos II :: Propiedades http://www.conoce3000.com/html/espaniol/Libros/PascalConFreePascal/Cap1102Propiedades.php 1/4 PASCAL CON FREE PASCAL 11. Introducción a la programación orientada a objetos II. 11.2. Propiedades . anterior :: indice :: siguiente 11.1. Excepciones. 11.2. Propiedades. 11.3. Métodos abstractos. 11.4. Referencias de clase. 11.5. Solapamiento de objetos, operadores is y as, y el método classtype. 11.6. Atributos, propiedades, métodos de clase y métodos estáticos. 11.7. Arreglos abiertos variant. 11.8. Preguntas y ejercicios. 11.9. Respuesta a las preguntas y ejercicios. Las propiedades actúan de manera similar a los atributos, pero con la diferencia de que el valor asignado a este atributo, es asociado a un método que puede ser una función o procedimiento . La palabra reservada property, se usa para definir la propiedad, y seguido se coloca su identificador, con el tipo de dato correspondiente, a continuación se especifican los métodos asociados que son una función para la lectura de los valores de la propiedad y un procedimiento para la escritura. La función que se usa para la lectura de una propiedad, no debe tener parámetros y debe devolver un valor del mismo tipo de dato de la propiedad, y el procedimiento para la escritura debe tener sólo un parámetro, en donde cuyo parámetro debe ser del mismo tipo de la propiedad. Para explicar el uso de propiedades se usará la unidad Complejos.pp , que contiene la definición de la clase TComplejo. Esta unidad, es una versión diferente a la vista en el capítulo anterior . A esta clase TComplejo, se le añadió el atributo decimales, que sirve para indicar con cuantos decimales se representarán, la parte real e imaginaria del número, y además al constructor crear de esta clase se le añadió un tercer parámetro opcional, para poder crear el número complejo, con los decimales que uno desee usar. Otros cambios que se hicieron a esta unidad tienen que ver con las propiedades que se explican a continuación. Las propiedades siempre se deben crear en la sección publica de una clase (public), no obstante sus métodos se deben implementar en la sección privada de la clase. Aunque el compilador permite implementar los métodos de una propiedad, en cualquier parte de la clase, esto en realidad no es lo recomendado, ya que se tendría dos maneras de trabajar con las clase, cuando en realidad sólo se necesita de una. Por ejemplo la siguiente propiedad: Property CompCad:string read ObtCompCad write PonCompCad; que pertenece a la clase TComplejo (ver la unidad Complejos.pp ), hace uso de las funcion ObtCompCad y del procedimiento PonComCad, estos métodos se implementan en la sección privada de la clase. Las palabras reservadas read y write, nos sirven para indicar que método se usará para lectura o escritura de la propiedad. Una de las cosas que se debe tener presente, es que este no es exactamente igual a un atributo, ya que una propiedad es una referencia que se usará, con una función o un procedimiento. Esto hace que la propiedad, no se pueda usar con métodos o cualquier otra rutina, que usen parámetros por referencia es decir un parámetro declarado con la palabra reservada Var. El siguiente código de ejemplo no funcionará: Readln(C.CompCad) La implementación del método ObtCompCad, consistirá en llamar al método ObtCad, con el valor encontrado en la propiedad decimales, y el método PonCompCad, se implementará con el método PonCad, si este devuelve un valor diferente a cero, entonces lanzará una excepción de conversión invalida EconvertError. A continuación se muestra el código de estos dos métodos: FUNCTION TComplejo.ObtCompCad:string; BEGIN ObtCompCad:=ObtCad(decimales) END; PROCEDURE TComplejo.PonCompCad(n:string); BEGIN IF PonCad(n)<>0 THEN raise EConvertError. Create ('Error datos no validos ingresados'); END; LENGUAJES DE PROGRAMACIÓN

description

lkhlkh

Transcript of Conoce300 __ Pascal Con Free Pascal __ Introducción a La Programación Orientada a Objetos II __...

Page 1: Conoce300 __ Pascal Con Free Pascal __ Introducción a La Programación Orientada a Objetos II __ Propiedades

15/10/2015 Conoce300 :: Pascal con Free Pascal :: Introducción a la programación orientada a objetos II :: Propiedades

http://www.conoce3000.com/html/espaniol/Libros/PascalConFreePascal/Cap11­02­Propiedades.php 1/4

PASCAL CON FREE PASCAL

11. Introducción a la programación orientada a objetos II.

11.2. Propiedades. anterior :: indice :: siguiente 11.1. Excepciones.11.2. Propiedades.11.3. Métodos abstractos.11.4. Referencias de clase.

11.5. Solapamiento de objetos, operadores is y as,y el método classtype.11.6. Atributos, propiedades, métodos de clase ymétodos estáticos.

11.7. Arreglos abiertos variant.11.8. Preguntas y ejercicios.11.9. Respuesta a las preguntas y ejercicios.

Las propiedades actúan de manera similar a los atributos, pero con la diferencia de que el valor asignado a este atributo, esasociado a un método que puede ser una función o procedimiento.La palabra reservada property, se usa para definir la propiedad, y seguido se coloca su identificador, con el tipo de datocorrespondiente, a continuación se especifican los métodos asociados que son una función para la lectura de los valores de lapropiedad y un procedimiento para la escritura.La función que se usa para la lectura de una propiedad, no debe tener parámetros y debe devolver un valor del mismo tipo de datode la propiedad, y el procedimiento para la escritura debe tener sólo un parámetro, en donde cuyo parámetro debe ser del mismotipo de la propiedad.Para explicar el uso de propiedades se usará la unidad Complejos.pp, que contiene la definición de la clase TComplejo. Estaunidad, es una versión diferente a la vista en el capítulo anterior. A esta clase TComplejo, se le añadió el atributo decimales, quesirve para indicar con cuantos decimales se representarán, la parte real e imaginaria del número, y además al constructor crear deesta clase se le añadió un tercer parámetro opcional, para poder crear el número complejo, con los decimales que uno desee usar.Otros cambios que se hicieron a esta unidad tienen que ver con las propiedades que se explican a continuación.Las propiedades siempre se deben crear en la sección publica de una clase (public), no obstante sus métodos se debenimplementar en la sección privada de la clase. Aunque el compilador permite implementar los métodos de una propiedad, encualquier parte de la clase, esto en realidad no es lo recomendado, ya que se tendría dos maneras de trabajar con las clase,cuando en realidad sólo se necesita de una. Por ejemplo la siguiente propiedad:

Property CompCad:string read ObtCompCad write PonCompCad; que pertenece a la clase TComplejo (ver la unidad Complejos.pp), hace uso de las funcion ObtCompCad y del procedimientoPonComCad, estos métodos se implementan en la sección privada de la clase. Las palabras reservadas read y write, nos sirvenpara indicar que método se usará para lectura o escritura de la propiedad. Una de las cosas que se debe tener presente, es queeste no es exactamente igual a un atributo, ya que una propiedad es una referencia que se usará, con una función o unprocedimiento. Esto hace que la propiedad, no se pueda usar con métodos o cualquier otra rutina, que usen parámetros porreferencia es decir un parámetro declarado con la palabra reservada Var. El siguiente código de ejemplo no funcionará: Readln(C.CompCad) La implementación del método ObtCompCad, consistirá en llamar al método ObtCad, con el valor encontrado en la propiedaddecimales, y el método PonCompCad, se implementará con el método PonCad, si este devuelve un valor diferente a cero,entonces lanzará una excepción de conversión invalida EconvertError. A continuación se muestra el código de estos dos métodos:

FUNCTION TComplejo.ObtCompCad:string; BEGIN ObtCompCad:=ObtCad(decimales) END; PROCEDURE TComplejo.PonCompCad(n:string); BEGIN IF PonCad(n)<>0 THEN raise EConvertError.Create('Error datos no validos ingresados'); END;

LENGUAJES DE PROGRAMACIÓN

Page 2: Conoce300 __ Pascal Con Free Pascal __ Introducción a La Programación Orientada a Objetos II __ Propiedades

15/10/2015 Conoce300 :: Pascal con Free Pascal :: Introducción a la programación orientada a objetos II :: Propiedades

http://www.conoce3000.com/html/espaniol/Libros/PascalConFreePascal/Cap11­02­Propiedades.php 2/4

Código fuente 9: Métodos ObtComCad y PonComCad de la unidad Complejos.pp. Las propiedades también pueden hacer uso de indices, los indices de una propiedad nos permiten usar el mismo método en variaspropiedades. Esto nos ayudaría a reducir código redundante o repetitivo, por ejemplo en la clase TComplejo, de la unidadComplejos.pp, se eliminaron los métodos ObtReal, ObtImag, PonReal y PonImag, y se modificaron también los métodos quehacen uso de estos; por las propiedades, Real e Imag. Estas propiedades harán uso de los métodos ObtComp y PonComp. Ladeclaración de las propiedades Real e Imag es como sigue:

Property Real:double index 1 read ObtComp write PonComp;Property Imag:double index 2 read ObtComp write PonComp;

Tal como se puede observar, se hace uso de la palabra reservada index, esto nos permite indicar que propiedad será modificadapor uno de los métodos. Los métodos para lectura y escritura, deben tener un parámetro de tipo integer, que servirá para que élmétodo pueda identificar, sobre que propiedad se harán los cambios. El código de estos métodos se muestra a continuación:

PROCEDURE TComplejo.PonComp(indice:integer;r:double); BEGIN IF indice=1 THEN ParteReal:=r; IF indice=2 THEN ParteImag:=r END; FUNCTION TComplejo.ObtComp(indice:integer):double; BEGIN IF indice=1 THEN ObtComp:=ParteReal; IF indice=2 THEN ObtComp:=ParteImagEND;

Código fuente 10: Métodos PonComp y ObtComp de la unidad Complejos.pp. En los métodos se hace uso de la estructura if/then, para modificar los atributos ParteReal y ParteImag, no obstante se pudo usartambién una estructura Case/of.El siguiente programa hace uso de estas propiedades implementadas en la unidad complejos.

$codepage utf8$mode objfpcUSES Complejos,sysutils;VAR A:TComplejo;BEGIN A:=TComplejo.Crear(4,2); Writeln(A.CompCad); A.CompCad:='4+3i'; Writeln(A.CompCad); A.real:=5; A.Imag:=8; Writeln(A.CompCad);END.

Código fuente 11: Ejemplo del uso de la nueva unidad Complejos.pp. Las propiedades también se pueden usar, para implementar clases que se comporten como arreglos, para ello se debe colocarentre corchetes el tipo de dato que se usara como indice, para acceder al atributo que será la lista a implementar. Por ejemplo lasiguiente declaración, implemente una propiedad que permite leer y escribir, los elementos de una lista de enteros.

Property Elemento[i:integer]:integer read Obt write Pon;default; Entre los corchetes se coloca el tipo de dato que se usará como indice de la lista. El indice también puede ser un tipo de datocomo string, con lo cual se puede implementar una clase basada en clave y valor, que se conoce como arreglos asociativos ovectores asociativos. El código fuente de la Unidad ListaEnteros que implementa la clase TlistaEnteros, es la siguiente:

$codepage utf8$mode objfpcUNIT ListaEnteros;INTERFACE

TYPE TListaEnteros = CLASS PRIVATE Elementos:ARRAY OF integer; PROCEDURE Pon(indice:integer;r:integer); FUNCTION Obt(indice:integer):integer; PUBLIC cantidad:integer; CONSTRUCTOR Crear(n:integer=100); Property Elemento[i:integer]:integer read Obt write Pon;default;

Page 3: Conoce300 __ Pascal Con Free Pascal __ Introducción a La Programación Orientada a Objetos II __ Propiedades

15/10/2015 Conoce300 :: Pascal con Free Pascal :: Introducción a la programación orientada a objetos II :: Propiedades

http://www.conoce3000.com/html/espaniol/Libros/PascalConFreePascal/Cap11­02­Propiedades.php 3/4

END;

IMPLEMENTATION

PROCEDURE TListaEnteros.Pon(indice:integer;r:integer); BEGIN Elementos[indice]:=r END; FUNCTION TListaEnteros.Obt(indice:integer):integer; BEGIN Obt:=Elementos[indice] END;

CONSTRUCTOR TListaEnteros.Crear(n:integer=100); BEGIN SetLength(Elementos,n); cantidad:=n END;

END.

Código fuente 12: Unidad ListaEnteros.pp. Los métodos Pon y Obt, son los que se encargarán de colocar los números enteros a la lista. Tal como se puede observar en lapropiedad Elemento, al final esta colocado la palabra reservada default, este nos permite acceder a los elementos de la clase,como si este fuera un arreglo de enteros. Asumiendo que MiLista es un objeto de la clase TlistaEnteros, a los elementos sepueden acceder del siguiente modo:

MiLista[10]:=45; En caso no se use default, entonces para acceder a los elementos se hace del siguiente modo:

MiLista.Elementos[10]:=45; El siguiente programa hace uso de la clase TlistaEnteros:

$codepage utf8$mode objfpcUSES ListaEnteros;VAR MiLista:TListaEnteros; i:integer;BEGIN MiLista:=TListaEnteros.Crear(10); //0‐99 elementos; randomize; FOR i:=0 TO MiLista.cantidad‐1 DO MiLista[i]:=random(1000); FOR i:=0 TO MiLista.cantidad‐1 DO Writeln('[',i,']=',MiLista[i]) END.

Código fuente 13: Programa ejemplo del uso de la unidad ListaEnteros.pp.

Twittear 0

anterior :: indice :: siguiente

SUGERENCIAS

0Recomendar

Trabaja en SedesolAccede a sus ofertas de empleo. Checa las vacantes y postúlate.

Page 4: Conoce300 __ Pascal Con Free Pascal __ Introducción a La Programación Orientada a Objetos II __ Propiedades

15/10/2015 Conoce300 :: Pascal con Free Pascal :: Introducción a la programación orientada a objetos II :: Propiedades

http://www.conoce3000.com/html/espaniol/Libros/PascalConFreePascal/Cap11­02­Propiedades.php 4/4

"Agradezco que se tomen su tiempo, para escribirme una sugerencia. Toda sugerencia que meescriba me ayuda a mejorar los contenidos de la web acorde a sus necesidades. Las sugerencias, serecibirán siempre y cuando ingrese al menos su nombre o seudónimo y la sugerencia. Lassugerencias son de uso interno y no serán publicadas en la web Conoce3000" Nombre o seudónimo :

Correo Electrónico :

Sugerencias :

Deseo recibir una copia del mensaje. Enviar

PORTADA | LIBROS | APUNTES | ARTÍCULOS

Todos los textos, imágenes y videos de Conoce3000 estan colocados bajo una licencia :Creative Commons Reconocimiento­NoComercial 3.0 Unported License.