Comunidad Gambas-es

Versión completa: POO: Hacer con más, lo que se puede hacer con menos...
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Páginas: 1 2
Hola  todos:

Acostumbrado desde hace muchos años a la programación lineal, me veo "obligado" [aunque con cierta curiosidad], a desentrañar el por qué la POO es mas "conveniente".

He buscado en la web, las ventajas y desventajas de la POO, pero las explicaciones son tan ambiguas como la propia POO. No obstante saltan a la vista las desventajas, y la mas importante: Es mas lenta la ejecución de un proyecto o programa elaborado con POO.

Será cierto? De todos modos, me gustaría mirar un diagrama de Clases, Constructores, métodos y propiedades en donde se observe que "hay ganancia" en la Programación Orientada a Objetos....

Saludos..
En gambas estás usando POO en el momento en que utilizas cualquier control y casi cualquier componente. La inmensa ventaja es la reutilización y modificación del código que ya está hecho... sin siquiera llegar a verlo. Respecto a las velocidades alegadas y demás, pues no tengo claro si eso es así "en condiciones de laboratorio" pero en "la vida real" y hablando de aplicaciones gráficas no creo que puedas apreciar diferencias de ningún tipo. Cuesta hacer el cambio de chip, al menos a mí me costó, pero una vez lo asimilas estás encantado con ella.
Como muestra un botón:

Ayer necesité un control que se comportase como un FileChooser pero que permitiese mostrar o dejar de mostrar el árbol de directorios a voluntad del usuario y sin perder las "cositas" que lleva FileChooser (menús contextuales, breadcrumbs, etc.).
Una pequeña investigación en la clase y su estructura y en diez minutos lo tenía desarrollado y mi Gambas exendido en un control nuevo que heredando de FileChooser y con una propiedad añadida para ese comportamiento, en un derroche de imaginación y creatividad llamé ChooserFiles.

[Imagen: 0egzAnB.png]


Eso con funciones me habría costado semanas. Adjunto el ejemplo de la imagen.

Saludos
Se me olvidó añadir el código para el que no desee descargar el ejemplo:

GAMBAS
  1. ' Gambas class file
  2.  
  3.  
  4. Inherits FileChooser  ''Just add a property to filechooser that allow hide/show the directories treeview
  5.  
  6. Public Const _Properties As String = "*,ShowTree=True"
  7. Public Const _Group As String = "Chooser"
  8. Public Const _Similar As String = "FileChooser"
  9. Public Const _Draw As String = "FileView"
  10.  
  11.  
  12. Public Sub _new()
  13.  
  14.     Dim o As Object
  15.  
  16.     o = Me
  17.     $tree = o.DirView.parent
  18.  
  19.  
  20. Private Function ShowTree_Read() As Boolean
  21.  
  22.     Return $tree.visible
  23.  
  24.  
  25. Private Sub ShowTree_Write(Value As Boolean)
  26.  
  27.     $tree.visible = value
  28.  



Saludos
AlfredoSC:
Cita:me gustaría mirar un diagrama de Clases, Constructores, métodos y propiedades en donde se observe que "hay ganancia" en la Programación Orientada a Objetos....

El otro dia, hice un ejemplo de un programa que hace lo mismo usando el paradigma  procedimental y el POO:



Para ver "ganancia", puedes ver por ejemplo lo simple que es realizar "hacer y deshacer"  .

Tambien en mi curso online gratuito de gambas3, puedes ver un montón de ejemplos de programación orientada a objetos y patrones de diseño:

POO: PATRONES DE DISEÑO
 


Saludos

Julio
Hola.

Ya que hablamos de POO me surge una duda. Pongamos que creo la clase B que hereda de la clase A. En la clase B hago un constructor, pero en la clase A tiene también un constructor, que pongamos recibe parámetros. ¿Como hago para llamar al constructor de la clase A desde la clase B?

Gracias.
Eso no tiene sentido. Un objeto hereda al otro, es decir "es" el otro con modificaciones. El constructor de B debe establecer sus propios parámetros.
Se puede acceder a las propiedades y métodos específicos del ancestro usando la palabra Super. Pero es verdad que acceder al constructor del padre, no tiene mucho sentido, puesto que al crear el objeto heredado estás llamando al constructor del objeto hijo que ya es parte del padre, no se si me explico bien.

Saludos
Hola.

 Si, se que lo he escrito no tiene sentido. Estaba pensando en lo que hace Python con, por ejemplo, con Gtk3.

Python
  1. import gi
  2.  
  3. gi.require_version("Gtk", "3.0")
  4. from gi.repository import Gtk
  5.  
  6.  
  7. class LabelWindow(Gtk.Window):
  8. def __init__(self):
  9. super().__init__(title="Label Example")



Como se puede ver, la clase LabelWindow hereda de Gtk.Window y en el constructor se ve como llama al constructor de la clase padre. Se que Python no es Gambas y hace las cosas de otra manera, y por eso mi comentario, me he confundido de lenguaje Blush

Un saludo.
El tema es que al "construir" la clase hijo ya se ha "construido" la clase padre previamente. Por eso no tiene sentido "reconstruir" la clase padre. Aquí lo correcto es establecer la propiedad que se desea en la propia clase hijo y dar los valores y comportamientos que se deseen en él.

Saludos.
Hola.

Tienes razón Shordi, lo veo claro, y parece coherente añadir propiedades para por ejemplo en el caso de querer añadir un texto a la etiqueta. Pero también es verdad es si en Python se hace así algún motivo habrá, se me escapa el por qué.

Saludos.
Páginas: 1 2