Páginas (2): 1 2   
AlfredoSC   28-01-2022, 18:22
#1
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..

Es mejor saber un poco de todo, que todo de muy poco. Lo primero, garantiza la supervivencia humana.
Shordi   28-01-2022, 20:58
#2
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
Archivos adjuntos
.gz
ChooserFiles-0.0.1.tar.gz (Tamaño: 15.4 KB Descargas: 2)

No podemos regresar
Shordi   29-01-2022, 19:21
#3
Se me olvidó añadir el código para el que no desee descargar el ejemplo:

Código:
' Gambas class file

Export

Inherits FileChooser  ''Just add a property to filechooser that allow hide/show the directories treeview

Public Const _Properties As String = "*,ShowTree=True"
Public Const _Group As String = "Chooser"
Public Const _Similar As String = "FileChooser"
Public Const _Draw As String = "FileView"

Property ShowTree As Boolean
Private $tree As Object

Public Sub _new()

    Dim o As Object

    o = Me
    $tree = o.DirView.parent

End

Private Function ShowTree_Read() As Boolean

    Return $tree.visible

End

Private Sub ShowTree_Write(Value As Boolean)

    $tree.visible = value

End

Saludos

No podemos regresar
jsbsan   29-01-2022, 20:26
#4
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
guizans   30-01-2022, 22:05
#5
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.
Shordi   31-01-2022, 10:23
#6
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.

No podemos regresar
jguardon   31-01-2022, 11:53
#7
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

Por favor, usa el corrector ortográfico antes de pulsar el botón 'Enviar'
guizans   02-02-2022, 22:18
#8
Hola.

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

Código:
import gi

gi.require_version("Gtk", "3.0")
from gi.repository import Gtk


class LabelWindow(Gtk.Window):
def __init__(self):
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.
Shordi   03-02-2022, 11:36
#9
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.

No podemos regresar
guizans   04-02-2022, 23:05
#10
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 (2): 1 2   
  
Usuarios navegando en este tema: 3 invitado(s)
Powered By MyBB, © 2002-2024 MyBB Group.
Made with by Curves UI.