Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: alvk4r en 3 Noviembre 2008, 16:43 pm



Título: Tk en Python usando OOP
Publicado por: alvk4r en 3 Noviembre 2008, 16:43 pm
Bueno que hace tiempo no posteo nada... realmente he estado bastante liado con el trabajo... Interesante este curso, lastima que no siga... No obstante aportare mi granito..

Las interfaces graficas, por un problema de reusabilidad, organizacion y otras razones deben programarse utilizando un modelo orientado a objetos.

Nota sobre los Frames: Los frames son widgets que pueden contener otros widgets como botones, etiquetas, etc. Permiten agrupar controles.

Código
  1. from Tkinter import *
  2. class Application(Frame):
  3.  """ GUI application which counts button clicks. """
  4.  def __init__(self, master):
  5.    """ Inicializa el Frame. """
  6.    Frame.__init__(self, master)
  7.    self.grid()
  8.    self.bttn_clicks = 0    # the number of button clicks
  9.    self.create_widgets()
  10.  
  11.  def create_widgets(self):
  12.    """ Crea widgets. """
  13.    self.lbl = Label(self, text="Total Clicks: 0")
  14.    self.lbl.grid()
  15.  
  16.    self.bttn = Button(self, text="ClickMe", command=self.update_count)
  17.    self.bttn.grid()
  18.  
  19.  def update_count(self):
  20.    """ Increase click count and display new total. """
  21.    self.bttn_clicks += 1
  22.    self.lbl["text"] = "Total Clicks: "+ str(self.bttn_clicks)
  23.  
  24. root = Tk()
  25. root.title("Click Counter")
  26. root.geometry("200x50")
  27.  
  28. app = Application(root)
  29.  
  30. root.mainloop()
  31.  

En este ejemplo se muestra como manejar Frames de forma independiente. En vez de heredar la clase Frame heredamos Tk.
Código
  1. from Tkinter import *
  2.  
  3. class FrameMan(Tk):
  4.  """ Gestion de Frames. """
  5.  def __init__(self):
  6.    """ Initialize the frame. """
  7.    Tk.__init__(self)
  8.    self.grid()
  9.  
  10.    self.title("Simple Calculator.")
  11.    self.resizable(width = 0, height = 0)
  12.    self.geometry("200x75")
  13.  
  14.    self.result = 0
  15.    self.createWidgets()
  16.  
  17.  def createWidgets(self):
  18.    """ Creamos el Frame y demas controles hijos. """
  19.    self.myFrame1 = Frame(self)
  20.    self.myFrame2 = Frame(self)
  21.    self.myFrame1.grid(row = 0, column = 0)
  22.    self.myFrame2.grid(row = 0, column = 1)
  23.  
  24.    self.Label1 = Label(self.myFrame1, text = "Este es el Frame 1")
  25.    self.Label2 = Label(self.myFrame2, text = "Este es el Frame 2")
  26.    self.Label1.grid()
  27.    self.Label2.grid()
  28.  
  29.    self.Button1 = Button(self, text = "Dest 1", command = self.destF1)
  30.    self.Button2 = Button(self, text = "Dest 2", command = self.destF2)
  31.    self.Button1.grid(row = 1, column = 0)
  32.    self.Button2.grid(row = 1, column = 1)
  33.  
  34.  def runApp(self):
  35.    """ Ejecutamos la aplicacion. """
  36.    self.mainloop()
  37.  
  38.  def destF1(self):
  39.    self.myFrame1.destroy()
  40.  
  41.  def destF2(self):
  42.    self.myFrame2.destroy()
  43.  
  44. root = FrameMan().runApp()
  45.  

Por ultimo dos variantes de un mismo programa. Es una calculadora simple donde escogemos la operacion a realizar. Buen ejemplo, puesto que muestra el uso de diferentes controles, asi como el uso del layout manager grid().

Variante 1:

Código
  1. from Tkinter import *
  2.  
  3. def showWindows():
  4.  root = Tk()
  5.  root.title("Simple Calculator.")
  6.  root.resizable(width = 0, height = 0)
  7.  root.geometry("370x75")
  8.  Application(root)
  9.  root.mainloop()
  10.  
  11. class Application(Frame):
  12.  """ Calculadora simple usando Tkinter. """
  13.  def __init__(self, master):
  14.    """ Initialize the frame. """
  15.    Frame.__init__(self, master)
  16.    self.grid()
  17.    self.result = 0
  18.    self.create_widgets()
  19.  
  20.  def create_widgets(self):
  21.    """ Creamos controles hijos. """
  22.    self.numb1 = Entry(self)
  23.    self.numb1.grid(row = 0, column = 0, columnspan = 2, sticky = E)
  24.    self.numb1.insert(0, "0")
  25.  
  26.    self.lblop = Label(self, text="?")
  27.    self.lblop.grid(row = 0, column = 1, sticky = E)
  28.  
  29.    self.numb2 = Entry(self, text = "0")
  30.    self.numb2.grid(row = 0, column = 2, columnspan=2, sticky = E)
  31.    self.numb2.insert(0, "0")
  32.  
  33.    self.lblEqual = Label(self, text = "=")
  34.    self.lblEqual.grid(row = 0, column = 5, sticky = E)
  35.  
  36.    self.lblResult = Label(self, text = "Result")
  37.    self.lblResult.grid(row = 0, column = 6, sticky = E)
  38.  
  39.    self.opr = StringVar()
  40.    self.opr.set = "?"
  41.  
  42.    self.optSum = Radiobutton(self,
  43.                              text = "+",
  44.                              variable = self.opr,
  45.                              value = "+",
  46.                              command = self.upd_opr
  47.                              ).grid(row = 1, column = 0, sticky = W)
  48.  
  49.    self.optRest = Radiobutton(self,
  50.                              text = "-",
  51.                              variable = self.opr,
  52.                              value = "-",
  53.                              command = self.upd_opr
  54.                              ).grid(row = 2, column = 0, sticky = W)
  55.  
  56.    self.optMult = Radiobutton(self,
  57.                              text = "*",
  58.                              variable = self.opr,
  59.                              value = "*",
  60.                              command = self.upd_opr
  61.                              ).grid(row = 1, column = 1, sticky = W)
  62.  
  63.    self.optDiv = Radiobutton(self,
  64.                              text = "/",
  65.                              variable = self.opr,
  66.                              value = "/",
  67.                              command = self.upd_opr
  68.                              ).grid(row = 2, column = 1, sticky = W)
  69.  
  70.    self.btnCalc = Button(self, text = "Calcular", command = self.calc)
  71.    self.btnCalc.grid(row = 1, column = 2, rowspan = 2, sticky = E)
  72.  
  73.  def upd_opr(self):
  74.    self.lblop["text"] = self.opr.get()
  75.  
  76.  def calc(self):
  77.    """ Realizamos el calculo escogido. """
  78.    if self.opr.get() == "+":
  79.      self.result = float(self.numb1.get()) + float(self.numb2.get())
  80.      self.lblResult["text"] = self.result
  81.    elif self.opr.get() == "-":
  82.      self.result = float(self.numb1.get()) - float(self.numb2.get())
  83.      self.lblResult["text"] = self.result
  84.    elif self.opr.get() == "*":
  85.      self.result = float(self.numb1.get()) * float(self.numb2.get())
  86.      self.lblResult["text"] = self.result
  87.    elif self.opr.get() == "/":
  88.      self.result = float(self.numb1.get()) / float(self.numb2.get())
  89.      self.lblResult["text"] = self.result
  90.  
  91. showWindows()
  92.  

Variante 2:

Código
  1. from Tkinter import *
  2.  
  3. class SimpleCalc(Tk):
  4.  """ Calculadora simple usando Tkinter. """
  5.  def __init__(self):
  6.    """ Initialize the frame. """
  7.    Tk.__init__(self)
  8.    self.grid()
  9.  
  10.    self.title("Simple Calculator.")
  11.    self.resizable(width = 0, height = 0)
  12.    self.geometry("370x75")
  13.  
  14.    self.result = 0
  15.    self.createWidgets()
  16.  
  17.  def createWidgets(self):
  18.    """ Creamos el Frame y demas controles hijos. """
  19.    self.myFrame = Frame(self)
  20.    self.myFrame.grid()
  21.  
  22.    self.numb1 = Entry(self.myFrame)
  23.    self.numb1.grid(row = 0, column = 0, columnspan = 2, sticky = E)
  24.    self.numb1.insert(0, "0")
  25.  
  26.    self.lblop = Label(self.myFrame, text="?")
  27.    self.lblop.grid(row = 0, column = 1, sticky = E)
  28.  
  29.    self.numb2 = Entry(self.myFrame, text = "0")
  30.    self.numb2.grid(row = 0, column = 2, columnspan=2, sticky = E)
  31.    self.numb2.insert(0, "0")
  32.  
  33.    self.lblEqual = Label(self.myFrame, text = "=")
  34.    self.lblEqual.grid(row = 0, column = 5, sticky = E)
  35.  
  36.    self.lblResult = Label(self.myFrame, text = "Result")
  37.    self.lblResult.grid(row = 0, column = 6, sticky = E)
  38.  
  39.    self.opr = StringVar()
  40.    self.opr.set = "?"
  41.  
  42.    self.optSum = Radiobutton(self.myFrame,
  43.                              text = "+",
  44.                              variable = self.opr,
  45.                              value = "+",
  46.                              command = self.updOpr
  47.                              ).grid(row = 1, column = 0, sticky = W)
  48.  
  49.    self.optRest = Radiobutton(self.myFrame,
  50.                              text = "-",
  51.                              variable = self.opr,
  52.                              value = "-",
  53.                              command = self.updOpr
  54.                              ).grid(row = 2, column = 0, sticky = W)
  55.  
  56.    self.optMult = Radiobutton(self.myFrame,
  57.                              text = "*",
  58.                              variable = self.opr,
  59.                              value = "*",
  60.                              command = self.updOpr
  61.                              ).grid(row = 1, column = 1, sticky = W)
  62.  
  63.    self.optDiv = Radiobutton(self.myFrame,
  64.                              text = "/",
  65.                              variable = self.opr,
  66.                              value = "/",
  67.                              command = self.updOpr
  68.                              ).grid(row = 2, column = 1, sticky = W)
  69.  
  70.    self.btnCalc = Button(self.myFrame, text = "Calcular", command = self.calcRes)
  71.    self.btnCalc.grid(row = 1, column = 2, rowspan = 2, sticky = E)
  72.  
  73.    self.btnSal = Button(self.myFrame, text = "Salir", command = self.quitApp)
  74.    self.btnSal.grid(row = 1, column = 3, rowspan = 2, sticky = E)
  75.  
  76.  def updOpr(self):
  77.    self.lblop["text"] = self.opr.get()
  78.  
  79.  def runApp(self):
  80.    """ Ejecutamos la aplicacion. """
  81.    self.mainloop()
  82.  
  83.  def quitApp(self):
  84.    """ Funcion que llama al evento destroy() del objeto Tk. """
  85.    self.quit()
  86.  
  87.  def calcRes(self):
  88.    """ Realizamos el tipo de calculo escogido. """
  89.    if self.opr.get() == "+":
  90.      self.result = float(self.numb1.get()) + float(self.numb2.get())
  91.      self.lblResult["text"] = self.result
  92.    elif self.opr.get() == "-":
  93.      self.result = float(self.numb1.get()) - float(self.numb2.get())
  94.      self.lblResult["text"] = self.result
  95.    elif self.opr.get() == "*":
  96.      self.result = float(self.numb1.get()) * float(self.numb2.get())
  97.      self.lblResult["text"] = self.result
  98.    elif self.opr.get() == "/":
  99.      self.result = float(self.numb1.get()) / float(self.numb2.get())
  100.      self.lblResult["text"] = self.result
  101.    else:
  102.      tkMessageBox.showerror(title="Error!!!", message="Escoja un operador.").show()
  103.  
  104. #Corremos la aplicacion
  105. root = SimpleCalc().runApp()
  106.  

El metodo OOP o POO, como prefieran es harto flexible, y aunque en algunos casos complica la solucion a un problema, cuando se trata de interfaces graficas y eventos se hace conveniente su uso.
Para dudas respecto al codigo, busquen la(s) palabra(s) clave de la sección de codigo que despierte dudas en la ayuda de Python.


Título: Re: Tk en Python usando OOP
Publicado por: alvk4r en 4 Noviembre 2008, 13:44 pm
Al moderador si puede hacerme el favor de mover el tema a donde corresponde, no me di cuenta de en que sección estaba.


Título: Re: Tk en Python usando OOP
Publicado por: ^Tifa^ en 4 Noviembre 2008, 13:48 pm
Citar
Las interfaces graficas, por un problema de reusabilidad, organizacion y otras razones deben programarse utilizando un modelo orientado a objetos.

Depende el lenguaje en el cual trabajamos y la libreria de widgets que le implementamos.   :-*


Título: Re: Tk en Python usando OOP
Publicado por: alvk4r en 6 Noviembre 2008, 14:27 pm
Depende el lenguaje en el cual trabajamos y la libreria de widgets que le implementamos.   :-*

Es logico que estoy hablando de Python y Tk.

Aunque no soy partidario de usar OOP para todo, en muchos casos este modelo complica la solucion a un problema, y Python es flexible en cuanto a la decision de utilizar o no dicho modelo...
No conozco otra forma de implementar widgets, ni utilizando otra biblioteca de graficos ni ningun otro lenguaje... La forma en que estan programadas las bibliotecas de widgets te obliga a utilizar OOP (Me refiero solamente a lenguages imperativos, no funcionales ni logicos).
Aunque utilizes funciones para crear programas, cuando declares:
Código
  1. \
  2. ...
  3. milabel = Label(miFrame, text = "Mi ETIQUETA")
  4. ...
  5.  

Estas creando un objeto Label que hereda la clase Label().
Por ello es bueno organizar tu propio codigo en clases y demas...

Si utilizaras wxWidgets, QT o cualquier otra biblioteca gráfica, con C++, por ejemplo sucede lo mismo...
Si utilizaras la biblioteca Swing de Java, con Java o Jython... pues igual... te ves obligado  a trabajar con OOP.

Igual esta es mi opinion, si tienes algun ejemplo que mostrarme, relacionado a lo que dices, te lo agradeceria... Favor circunscribete al tema de Python... aunque utilices cualquier otra biblioteca grafica...


Título: Re: Tk en Python usando OOP
Publicado por: ^Tifa^ en 6 Noviembre 2008, 16:39 pm
Creo que es bastante notable que este post habla de python/tk y OOP   ::)

Pero cuando hice referencia a este punto :

Citar
Las interfaces graficas, por un problema de reusabilidad, organizacion y otras razones deben programarse utilizando un modelo orientado a objetos.

Y observando tu codigo posteado, con classes implementadas y eso...

Me acorde de C/GTK donde aun utilizando objetos que son los widgets, yo no puedo organizar mi codigo en classes.. sino llamando funciones en la mayoria de los casos...

Hablaba mas del desarrollo del codigo propio en si, que el funcionamiento de la libreria grafica. Ya que segun comentas, debido a que las librerias graficas manejan objetos la mejor manera de programar entonces es usando POO??? Y si el lenguaje que el usuario esta utilizando no tiene capacidad para ser POO??

A mi tampoco me gusta mucho la POO, como tu, digo que esta aqui para complicar las cosas.


Título: Re: Tk en Python usando OOP
Publicado por: alvk4r en 6 Noviembre 2008, 19:14 pm
Si utilizas algun IDE este crea e implementa las clases de forma automatica... y aunque no utilices una estructura de clases en tu aplicacion, en u nfinal esas funciones son metodos de clase...
Claro me diras que C no usa clases... no es C++ blah, blah,blah...
Y aunque se aleja del tema del Post, no he visto widgets utilizando ansi C o C en su forma pura...

Si tienes algun ejemplo mandamelo... pues me gusta conocer temas nuevos...


Título: Re: Tk en Python usando OOP
Publicado por: ^Tifa^ en 9 Noviembre 2008, 05:31 am

Ok, usare de ejemplo C y GTK+ que es lo que conozco un pelin y no puedo orientar a C a POO. Tienes razon al decir que las librerias graficas estan orientadas a objetos de hecho en el caso de Gtk+ digamos que su objeto principal es GtkObject. Pero que te digo en C, hasta lo poco que he podido ver nunca he tenido que llamar o dar uso directo de GtkObject. O sea si hubiera una manera en C/GTK de yo mapear dentro de una clase (Si C soportara POO como C++) el GtkObject me ahorraria muchas lineas de codigo. me evitara tener que memorizarme y utilizar tantos Macros para cada constructor en C o sea no puedo tener en C/GTK una classe con objetitos dentro sino que debo por cada objeto crear un constructor incluso al objeto principal 'window' debo crearlo independiente nuevo por ejemplo ::

GtkWindow *ventana;
GtkWindow *boton;
GtkWindow *palabra;

O sea que pesado no :/ fuera distinto si pudiera yo hacer algo tipo :

my ventana = new MainWindow;
boton = $ventana->boton(-text bla, -command bla);
palabra = $ventana->palabra(-text bla);

Y esto sin contar los dichosos MACROS predefinidos que tiene Gtk+ en C que hay que memorizarselos todos para ir declarando y llamando los objetos de cada constructor por ejemplo para GtkWindow *ventana :

GTK_WINDOW_TOPLEVEL  quisiera mapear 'GTK_' a alguna clase que se yo, digamos la clase Pepe.

Pepe::WINDOW_TOPLEVEL.
Pepe::Button
Pepe::Label

Y no ::

boton = GTK_BUTTON_NEW;
palabra = GTK_LABEL_NEW;

O sea en C/GTK aun utilizando la libreria de widgets GTK orientada a objetos lol claro... todos los widgets hay que ir practicamente linkeandolos llamando funciones independientemente cada vez. Incluso para empaquetar el widget final es un suplicio :
Y todo porque depende mucho si el lenguaje que estas usando soporta o no POO, no hablo explicitamente de la libreria grafica, sino del lenguaje en si al cual le integramos la libreria grafica.

Mira por ejemplo el empaquetamiento de un widget en C/GTK

GtkWidget *window;
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);

gtk_container_border_width (GTK_CONTAINER (window), 10);

1 - constructor
2 - declaracion objeto nuevo
3 - empaquetando dicho objeto

EN un lenguaje que soporte POO como C++, Python, etc harias algo tipo :

ventana = Pepe::Window.new(Pepe::WINDOW_TOPLEVEL)
ventana.border_width = 10

Donde gastas mas lineas? En el rustico C/Gtk llamando funciones ordinarias en macros predefinidos de la libreria grafica o en un lenguaje POO usando librerias graficas???




Título: Re: Tk en Python usando OOP
Publicado por: 43H4FH44H45H4CH49H56H45H en 10 Noviembre 2008, 06:02 am
Viendo los post anteriores dejo mi opinión...

No se puede debatir las ventajas de la POO y su aplicación con una base tan frágil como la que han mostrado en todo este hilo.
Las ventajas de la POO (relacionada con el Paradigma Basado en Objetos) solo pueden demostrarse en la creación de sistemas o aplicaciones de determinada complejidad en la cual se utilizan metodologías como El Proceso Unificado de Rational y el Lenguaje Unificado de Modelado UML, además de otras tecnologías y tipos de Ingeniería.
Paso de explicar cosas como el Modelamiento Visual y Proceso de Desarrollo de Software, Notaciones y Dentro de UML distintos tipos de diagramas los cuales  son utilizados (dependiendo del tipo de diagrama) por los Ingenieros de Control de calidad, Arquitectos, usuarios, analistas, diseñadores, gerentes y otros del Sistema.

Por tanto es difícil que lleguen a una conclusión válida con sus argumentos, conocimientos y experiencia.

Nota.- El lenguaje C puede adoptar la POO (mediante medidas sistemáticas) aunque no soporte algunas de las características avanzadas que soportan los lenguajes de programación orientada a objetos.


Título: Re: Tk en Python usando OOP
Publicado por: ^Tifa^ en 10 Noviembre 2008, 20:56 pm
Hola amigo.

Aqui ninguno de los 2 estamos debatiendo las ventajas de la POO. Creo que tus explicaciones son buenas Ok, pero si aqui no estabamos devatiendo eso :/  otra cosita que veo mal en tu comentario es que juzgues a 2 personas sin conocerla en cuanto a sus inferiores niveles de conocimientos segun tu y la POO.

Lo mio particularmente no va dirigido a la POO, lo he dicho muchas veces en otros posts, y no trabajo con ninguna POO, y espero no hacerlo nunca, porque para mis gustos particulares esa metodologia no aplica. Aqui se hablaba porque veo que estas deviiandote un poco, aqui hablabamos sobre mezclar librerias graficas y lenguajes y que esto obligase o no a utilizar una influencia POO, lo cual no siempre es cierto dependiendo el lenguaje que se utilize que fue lo que quize aclarar... nada mas, en ningun momento se hablo sobre ventajas de POO.

Yo se que en C se puede semi-implementar una similitud hacia POO pero eso no es el estandar de C ni el lenguaje esta predefinido para eso, eos es como querer hacer un bindings de algo que no vino para funcionar asi... para hacer ese espaghetti mejor se utiliza algo que lo soporte 100% como C++.

Es solo mi opinion, un saludo y no desvien el tema.


Título: Re: Tk en Python usando OOP
Publicado por: alvk4r en 10 Noviembre 2008, 22:52 pm
Completamente de acuerdo... Bravo ^TIFA^. Añadir que los paradigmas y filosofias son solo eso, paradigmas y filosofias... nada mas... mencionaste UML, sin embargo yo en mi trabajo debo desarrollar aplicaciones BPM que conllevan manejo masivo de datos, y aunque pudiera hacerlo con UML (me refiero al modelado de datos), me es mas ventajosos emplear ORM... Por cierto... que UML no es un lenguaje en si, ni una filosofia o ingeniería de desarrollo.. solo es un estándar que permite representar graficamente, entre otras cosas, clases y objetos... se aviene de lo mejor para modelar soluciones POO. Y en cuanto a otros tipos de ingeniería, no has hecho sino referencia a modelos utilizados ampliamente en temas de ingeniería de software (y actualmente es este mi fuerte por su vinculacion al Business Process Management), asi que no juzqgues así no mas.

Por ultimo recomiendo a los que usen Python experimentar con el Boa Constructor... para mi el mejor IDE hasta ahora...

^TIFA^ me hablaste del Ruby, siempre he querido experimentar con el, pero me falta tiempo... Si pudieras hacerte un tiempito... en python implementar GTK es mas simple... ya me tengo que ir... pronto te dejo un ejemplo... ;)


Título: Re: Tk en Python usando OOP
Publicado por: 43H4FH44H45H4CH49H56H45H en 11 Noviembre 2008, 05:40 am
Lo mio particularmente no va dirigido a la POO, lo he dicho muchas veces en otros posts, y no trabajo con ninguna POO, y espero no hacerlo nunca, porque para mis gustos particulares esa metodologia no aplica.

de seguro jamás la necesitarás

Por cierto... que UML no es un lenguaje en si, ni una filosofia o ingeniería de desarrollo.. solo es un estándar que permite representar graficamente, entre otras cosas, clases y objetos...

¿Y quién lo clasifico como alguno de ellos?

se utilizan metodologías como El Proceso Unificado de Rational y el Lenguaje Unificado de Modelado UML,

Si no entiendes a la primera lee nuevamente hasta hacerlo.

Y en cuanto a otros tipos de ingeniería, no has hecho sino referencia a modelos utilizados ampliamente en temas de ingeniería de software (y actualmente es este mi fuerte por su vinculacion al Business Process Management), asi que no juzqgues así no mas.

Escribí "Ingenierías" generalizando, pero doy un ejemplo "Ingeniería del Conocimiento"  y uno de tecnología "tecnología orientada a agentes", hubiese sido interesante debatir los lineamientos de la metodología Proceso Unificado de Rational con notación UML, tecnología orientada a agentes e ingeniería del conocimiento para posterior implementación en un lenguaje como JAVA o más interesante Python, pero con semejante respuesta sería una pérdida de tiempo.
Veo que no entiendes la diferencia entre modelos en ingeniería de software y lo mencionado.
¿Y ese es tu FUERTE? ya me imagino como será el resto.

Al parecer no te ayudo mucho el desarrollar aplicaciones BPM deberías desarrollar algunas CRM para mejorar un poco.

Por cierto, recuerdo que en algún lugar de tu código vi resizable(width = 0, height = 0) lo cual me parece un desperdicio puesto que es obvio lo que hace, sin necesidad de especificar "width y height". Tengo pereza mirar detalladamente el código entero para empezar mis críticas.


Título: Re: Tk en Python usando OOP
Publicado por: ^Tifa^ en 11 Noviembre 2008, 14:27 pm
SI tienes razon, no requiero de POO para hacer lo que ando buscando. Cada uno con sus gustos, donde trabajo a los demas analistas les encanta utilizar TOAD y Mysql WorkBench para acceder a la DB y crear  consultas y cosas.. A mi sin embargo, opto por abrir una shell o un ms-dos y trabajar por ahi en linea de comandos... Y lo mismito que hacen los demas en su TOAD y en su WorkBench lo hago yo en mi rustica terminal...

Que ellos lo hagan mas rapido en su IDE y yo mas lento en mi terminal, para al final, el resultado es el mismito. Eso pasa de similar manera con la POO y el lenguaje estructurado  ;)  por ende, no, no necesito la POO para nada. Y que tu conozcas y sepas toda la metodologia y parte tecnica de la POO Es admirable pero no te sientas superior por ello, porque que otro lo haga de otra manera a como tu lo harias no indica que ello este mal.


Y si alvk4r, sobre Ruby que te digo :) me gusta porque es tan parecido a TCL y su driver DBI para acceder cualquier DB relacional su sintaxis de programacion es extremadamente casi identica a la misma que aplico en Perl, y como conozco Perl de manera decente pues Ruby para lo que lo quiero utilizar no me resulta tan incomodo de manejar... y Ruby con GTK? mi proxima meta  :rolleyes:  al menos en Ruby/Gtk si se puede aplicar POO (Que no me gusta). Pero ahi les digo despues... Sobre python, no lo descarto, puede que decida en un futuro no muy lejano aprovechar y conocerlo  :rolleyes:


Título: Re: Tk en Python usando OOP
Publicado por: 43H4FH44H45H4CH49H56H45H en 12 Noviembre 2008, 11:47 am
A mi sin embargo, opto por abrir una shell o un ms-dos y trabajar por ahi en linea de comandos...

Así que utilizas MS-DOS, entonces en tu trabajo todavía utilizan Windows Me o versiones inferiores, a estas alturas?  :-\
En si utilizar un intérprete de comandos para trabajar en una base de datos, ya sea en una red o en Internet son cosas demasiado básicas, como en el caso de utilizar telnet (ora ya no), ssh o algún otro para programación en cobol/oracle en un servidor remoto de EEUU o Europa con UNIX  "nada del otro mundo".

Que ellos lo hagan mas rapido en su IDE y yo mas lento en mi terminal, para al final, el resultado es el mismito.

¿Y que diferencia de tiempo existe entre tu método y el de los otros analistas?

Eso pasa de similar manera con la POO y el lenguaje estructurado  ;)  por ende, no, no necesito la POO para nada.

Exacto y es lo que dije desde el comienzo.

Por tanto es difícil que lleguen a una conclusión válida con sus argumentos, conocimientos y experiencia.

Espero no tener que sacar los títeres o las plastilinas para que entiendas una simple línea.


Título: Re: Tk en Python usando OOP
Publicado por: ^Tifa^ en 12 Noviembre 2008, 13:16 pm
Pues que te digo.... donde trabajo si todavia utilizan Windows ME, Unix AIX, Solaris y Linux Red Hat  :rolleyes:  hay un combito de sabores aca.

Sobre mi ejemplificacion en cuanto a gustos de cada quien (Algunos prefieren un FrontEnd para trabajar, otros prefieren una simple terminal, algunos optan por usar la POO para programar, otros prefieren un lenguaje estructurado, etc). O sea mi ejemplo iba mas dirigido a explicarte que no importa que preferencias tengas por una forma de programar, que sea distinta al que otro prefiere no implica que sea mejor o peor solo eso.... Tampoco porque uses POO y otro personaje use Estructurado indica que tus conocimientos sean superior al otro.. es SIMPLES GUSTOS AMIGO! No existe nada de titeres que debas revelar o sacar por el mismo mero hecho de que alguien no tenga tus mismos ideales sobre un asunto.

Lol.. no veo porque deba armarse tal revuelvo por tan insignificante gustos personales, sinceramente  ;)


Título: Re: Tk en Python usando OOP
Publicado por: alvk4r en 12 Noviembre 2008, 14:30 pm
Aunque ya nos hemos despegado de la linea... pues.. un foro suele ser asi...
En cuanto a CRM (Customers Relationship Management) no aplica en el mismo contexto que BPM... y esto si no es tan opcional como la OOP...

Y agregar otra cosita.. he tenido que levantar proyectos en UML usando BOUML y Argos... y es un verdadero dolor de cabeza, dado el nivel de detalles que debes dar en el grafico para generar un codigo decente que como quiera debes modificar posteriormente...

Usar POO o no.. o programar a niveles m'as altos y por tanto mas abstractos es algo que cada cual debe reservar a su elecci'on segun el negocio de la aplicacion.. asi como usar o no IDE...

Tambien aclaro que en mi trabajo subsisten dinosaurios parte de los cuales pensamos extinguir con el proyecto que llevo, que utilizan un entorno Novell y por tanto PC con DOS, tambien 98 y ME...

Y en cuanto a preferencias... pues de acuerdo... cada cual escoja la que mejor convenga... y para refrescar pondre algun que otro ejemplo en estos dias...

Ahh , por cierto... si 4HH es cubano, podria llegarse a la XIII Feria Internacional de Informatica en febrero del 2009 al simposio de Tecnicas de Programacion... no obstante si no puede... ya ^TIFA^ lo conoce... ando buscando gente para trabajar en el proyecto que presento alli... es un algoritmo para un motor de indexado y b'usqueda y etiquetado de documentos que desarroll'e... faltan anadir algunos metodos conformados de forma teorica, asi como la interfaz grafica.. los metodos de preprocesamiento de datos, clustering y etiquetado ya estan hechos...

Por cierto... me gusta que ilustren con ejemplos (para 4hhh...)... si buscaste impactar, pues nada mijo que conozco gente que pueden dar una disertacion increible de tecnicas de programacion y tecnicismo... y jamas han logrado crear una aplicacion que funcione...

Y tio si ya que te gusta tanto competir... escojamos un problema X, traigamos aca una aplicacion... y que los demas foristas decidan cual es la nejor...
Cualquier lenguaje.. cualquier tecnica de programacion... cualkquier plataforma... yo presentare, la mia, tu la tuya, ^TIFA^ y alguien mas que le interese hacer la suya estan invitados... todo el que participe solucionara el mismo problema... midamos las diferentes soluciones al mismo problema X en cuanto a:
- Lo Optimo del codigo.
- Portabilidad
- Requerimiento de procesamiento
- Interfaz (no tiene porque ser grafica, sino intuitiva y "amigable")
- Funcionalidad y que aporte la solucion buscada...

Convenido? dime que te parece...

^TIFA^... inclusive puedes usar tu amado Ruby o Perl....


Título: Re: Tk en Python usando OOP
Publicado por: ^Tifa^ en 12 Noviembre 2008, 15:48 pm
Pero que onda...? No hay que darle continuacion a una discusion sin sentido...

Al chico este 4HHH le gusta su POO pos Amen, perfecto que ame, adore su POO, pero no por ello quiera discriminar quienes NO la usamos, solo eso.

Sobre personas que te llenen un libro de tecnisimos y una disertacion increible en cuanto a algoritmos y tecnicas avanzadas de programacion .... conozco bastantes de estos :) y como bien dices a la hora de tirar codigo.. se quedan exentos en el aire siberiano.

Lamentablemente no tengo proyectos que presentar  :-[  apenas estoy haciendo uno chiquititito una especie de punto de ventas de tarjetas de pines para unas 200 PC con Linux No grafico...

Y dicha aplicacion comenze a hacerla solamente con Perl, pero decidi integrarle C tambien :) entonces ando a mitad la aplicacion al ser no grafica la ando haciendo en C y Perl con Curses... y el objetivo es que esta trabaje con un SQL Server Remoto... Nada extremadamente avanzado, pero divertido :)

Dicha aplicacion pretenden luego solicitarmela pero para Linux entorno grafico, y es aqui cuando pretendo usar Ruby/GTK.


Título: Re: Tk en Python usando OOP
Publicado por: 43H4FH44H45H4CH49H56H45H en 13 Noviembre 2008, 13:03 pm
No necesito mas que unas cuantas líneas para poner en claro algunas cosas  :laugh:

Código:
#include <stdio.h>
#include <string.h>
void fuck(const char* metetela)
{
char mem[10];
printf("sabemos donde esta: \n%p\n%p\n%p\n%p\n%p\n%p\n\n");
strcpy(mem, metetela);
printf("%s\n", mem);
printf("Ahora parece:  \n%p\n%p\n%p\n%p\n%p\n%p\n\n");
}
void error(void)
{
printf("El error\n");
}
int main(int argc, char * argv[])
{
printf("Direc de fuck: %p\n", fuck);
printf("Direc de error: %p\n", error);
fuck(argv[1]);
return 0;
}

Dado el problema de este simple programa le damos la mejor solucion en plataforma windows.  :rolleyes: