Clases. Visibilidad - Versión para impresión +- Comunidad Gambas-es (https://gambas-es.org) +-- Foro: Gambas (https://gambas-es.org/forum-3.html) +--- Foro: General (https://gambas-es.org/forum-4.html) +--- Tema: Clases. Visibilidad (/thread-1622.html) |
Clases. Visibilidad - Shell - 03-03-2024 Buenas!. En el lenguaje Java (supongo que este también lo puede hacer de distintas formas). Los atributos, sus propiedades pueden ser privadas, ocultas. Lo curioso de Java es que para esto, cuando hablamos de propiedades, ejemplo, color, edad, (si fueran propiedades) usa el comando "this", en Gambas usamos "Me" como referencia. Ahora bien, una propiedad creada en Gambas es "pública". Cuando declaramos una instancia de esa clase o la usamos, "siempre" estamos viendo sus propiedades. A modo de ejemplo os mostraré algo creado en Gambas. La idea es que hay que "ocultar" sus propiedades o lo que quieran que solo este al alcance lo que interesa. (No todo). He creado una clase Alumno y una clase Alumno2. Alumno: Código: Property nombre As String Use $nombre Y ahora parecida, Alumno2 Código: Private nombre As String En este último caso, no se puede cambiar la propiedad edad o nombre desde su instancia, (no lo vemos), solo podemos obtenerlo. Y si queremos ya cambiarlo, pues se crearía un método para ello. O nos olvidaríamos de otros métodos. como getedad o setedad. En la clase principal he usado esto: Código: Public Sub Form_Open() ¿ Qué opinan ustedes de la visibilidad de las propiedades o métodos en la programación orientada objeto en "Gambas" ? Normalmente no uso formas como el ocultar las propiedades y luego mediante un método acceder a esta. Suelo declarar propiedades. Y ya saben que estas son públicas. Ah, en Python no existe algo como private o públic, son públicas, todas. En cambio en Java si y en C++ seguramente si. Otra forma, declarar la propiedad como solo lectura. Código: Property Read nombre As String Use $nombre Aunque es de solo lectura, es visible. Pero no puedes cambiarla, es casi como una constante, como un variable de clase ( no de instancia ). Que estas pueden ser públicas y ojo con eso. Imaginar que a la hora de crear una clase, siempre se crea con valores por defecto. coche , cuatro ruedas y así. Y ahora viene alguien y dice, pues no, ahora voy y le cambio la propiedad de ruedas y digo que el coche cuando ya se ha creado la instancia, que va a tener seis ruedas. ( Pero ojo, eso solo cambia en la instancia, no la clase ). Saludos RE: Clases. Visibilidad - guizans - 03-03-2024 Pues me parece el comportamiento más lógico del mundo. Dentro de una clase, puedes tener métodos o funciones, algunos pueden ser públicos y los que son del funcionamiento de la clase deben de ser privados. Lo de Python no me parece razonable, aunque si sigue así debe ser por que no importa demasiado. RE: Clases. Visibilidad - Shell - 04-03-2024 Guizans voy más por el tema de las propiedades, es que se ven siempre y cuando estas escribiendo código que trabaja con la clase pueden salir tropecientas. Te muestro el listado completo de propiedades y métodos que estuve haciendo en Gambas sobre un control mando de tv o televisor. Fíjate que se ven todas las propiedades. ( Los cuadrados) Para algo existe la encapsulación. Y como parece interesante, os muestro el vídeo sobre la abstracción. Saludos RE: Clases. Visibilidad - guizans - 09-03-2024 Hola Shell. No es por nada, pero si es una propiedad se supone que debe ser visible, para eso es una propiedad, pudiendo ser de lectura, escritura o ambas. En Gambas puedes encapsular las variables de clases haciéndolas privadas. Si heredas de una clase, lo lógico es que veas las propiedades de la clase padre más las propiedades de la tuya. De todas formas no me hagas mucho caso, ya que no soy experto en el tema y a lo mejor estoy diciendo alguna barbaridad, en cuyo caso tienes el permiso para ponerme de vuelta y media Un saludo. RE: Clases. Visibilidad - Shell - 09-03-2024 (09-03-2024, 21:27)guizans escribió: De todas formas no me hagas mucho caso, ya que no soy experto en el tema y a lo mejor estoy diciendo alguna barbaridad, en cuyo caso tienes el permiso para ponerme de vuelta y media Debe ser cosa de la aplicación en concreto. Esto no queda otra, que ir viendo códigos. Desde luego con Python no. Y con Java ya es mucho ( son más ocultas ). Debe ser una cosa propia de cada lenguaje. Si Gambas no se construyó con esa idea, ó que hay que llegar a verlo. Saludos |