martes, agosto 29, 2006

Records

Seguiremos con los cambios si vienes de Delphi win32 (la mayoria de los que se quedo en win32 lo hizo con Delphi 7, asi es que habra algunos que ya vieron estos cambios para win32 despues de la version 7) a delphi .Net, otro cambio es en las estructuras de datos tipo Record como el struct en C, aquellas donde podiamos agrupar varios campos se transforma para tener un comportamiento mas parecido a una clase.

En Delphi clasico solo podiamos definir los campos en un Record:

Persona = record
Nombre:
string ;
Paterno:
string ;
Materno:
string ;
Edad : Integer ;
end ;


 y podiamos utilizar esa estructura de la siguiente forma: 


var
p: Persona ;

begin
p.Nombre :
= 'Manuel' ;
p.Paterno :
= 'Perez' ;
p.Materno :
= 'Lopez' ;
p.Edad :
= 22 ;

MessageBox.Show(p.Nombre
+' '+p.Paterno) ;
end ;

 Ahora los tipos Record tambien soportan metodos, propiedades, constructores y tipos anidados, por ejemplo:



type

Persona
= record
Nombre:
string ;
Paterno:
string ;
Materno:
string ;
Edad : Integer ;
function NombreCompleto:
string ;
procedure AsignaEdad(NuevaEdad: Integer) ;
end ;

{ Persona }

procedure Persona.AsignaEdad(NuevaEdad: Integer);
begin
Self.Edad :
= NuevaEdad ;
end;

function Persona.NombreCompleto:
string;
begin
Result :
= Self.Nombre+' '+Self.Paterno+' '+Self.Materno ;
end;


y su uso es practicamente el mismo:



var
p: Persona ;

begin
p.Nombre :
= 'Manuel' ;
p.Paterno :
= 'Perez' ;
p.Materno :
= 'Lopez' ;
p.AsignaEdad(
25);
MessageBox.Show(p.NombreCompleto
+', '+p.Edad.ToString) ;
end ;


Y me imagino que de ahi surge la inche pregunta.. entonces cual es la diferencia entre un record y una clase? Aqui las listo:


* Los Records no soportan herencia.


* Los Records pueden contener partes variantes, las clases no.


* Los Records son tipos por valor, es decir pueden ser copiados en una asignacion, pasarlos por valor, y son alojados en la pila (a menos de que sean declarados globales o explicitamente creados con new y dispose). Las clases son tipos por referencia, no pueden ser copiadas por asignacion, se pasan por referencia y se alojan en el "heap".


* Los Records soportan sobrecarga de operadores en win32 y .Net, las clases solo permiten sobrecarga de operadores en .Net


* Los Records son construidos automaticamente, usando un constructor por default y sin argumentos, si declaras un constructor en un Record este forzosamente tendra que llevar argumentos, mientras que las clases tienen que ser construidas explicitamente.


* Los Records no pueden tener destructores.


* Los metodos virtuales, que son los que especificas con virtual, dynamic o message no pueden ser usados en un Record.


* Los Records en win32 no pueden implementar interfases, pero los Records en .Net si pueden implementarlas.

Que sigue...

 

Bueno despues de haber salido un par de dias a mi tierra retomamos esto, pues la semana pasada estuve preparando unas cosas porque iba a salir a mi Durango, Mex., estuve alla y llovio padre, ya hacia mucho que no veia lluvia de esa manera, o la neblina que tenia años que no la veia como el domingo al levantarme muy temprano, salir y ver la calle completamente llena de niebla, cosa que nunca pasa en Juarez o por lo menos no me ha tocado verla...

Ok, esta noche escribire sobre mas diferencias de Delphi Win32 y Delphi .Net, para aquellos que se quedaron en Delphi 7 o simplemente no han creado proyectos winforms o webforms en Delphi.

 

Saludos a Juan Hidalgo Carmona y felicitarlo por su primer Bebita!!!!

viernes, agosto 25, 2006

Links

Continuamos con los links a los screencasts:

7.- Tipos de datos basicos (Articulo aqui)

8.- Conjuntos (Articulo aqui)

9.- Arreglos (Articulo aqui)

10.- Records (Articulo aqui)

11.- Acceso Basico a Datos (Articulo aqui)

12.- Clases Basicas (Articulo Aqui)

Y bueno ya que andamos con links relacionados con el Delphi, pues ahora les dejo uno pa que bajen el codigo fuente del Quake 2 portado a Delphi... Chequenlo Aqui...

Bueno, me voy en este momento a Durango, ahi nos vemos mañana por mi tierra querida!!

lunes, agosto 21, 2006

DB Web

Antes de continuar actualizemos los links de los Screencasts con Turbo Delphi:

4.- Introducción al Lenguaje (Articulo Aquí)

5.- Introducción al Lenguaje Parte II (Articulo Aquí)

6.- Manipulación Básica de Cadenas (Articulo Aquí)

Los links de los screencasts anteriores los podemos encontrar al final del post anterior donde hablamos de BDP.

Como vimos con BDP, Borland Devco tambien creo controles para ASP .Net, en este caso aparecen en la Tool Palette bajo la pestaña que dice DB Web, y la cual tiene los siguientes controles:

1.- DBWebDataSource: Esta clase nos sirve para especificar la fuente de datos que va a proveer los datos que se le van a pasar aun control de datos. Funciona en conjunto con BDP y tambien con ADO .Net, El componente automaticamente identifica las relaciones, llaves primarias, etc del DataSet referenciado. Almacena informacion de errores para cada tabla. Tambien maneja y administra el estatus, binding y las conexiones a los DataSets, DataTables o DataViews.

2.- DBWebAggregateControl: Sirve para obtener resultados de funcion de "agregacion", es decir resultados de sum, avg, max, min, count de una columna de datos. El control muestra el valor en un TextBox y tambien le agrega un Label si le especificas la propiedad Caption.

3.- DBWebCalendar: Un componente que es un calendario "data-aware", es decir con acceso a una fuente de datos.

4.- DBWebCheckBox: Creo que todos conocemos los checkboxes, este tiene la funcionalidad de que es "data-aware", ademas de aceptar campos boleanos, tambien acepta campos de tipo string, aunque solo reconoce los siguientes valores cuando el campo es cadena, 'true', 'false', 'yes', 'no', 'on' y 'off'. ¿Y donde quedo uno como este para WinForms?

5.- DBWebDropDownList: Es un ComboBox con acceso a datos, se puede "poblar" con datos de un DataSet (Como un DBLookupCombo).

6.- DBWebGrid: Es un DataGrid, pero con mas funcionalidad, por ejemplo en la reunion de la comunidad mencionaron lo de la paginacion del grid, pues claro que Borland Devco ya incluye esta funcionalidad desde hace rato :), le puedes especificar el numero de renglones por pagina, editar renglones, reconoce las llaves primarias, etc.. tambien incluye todo lo del DataGrid de Asp .Net. (Claro y como Delphi nos tiene acostumbrados, desde diseño puedes llenar y ver los datos en el Grid y ver como va a quedar con datos)

7.- DBWebImage: Un control para mostrar imagenes, es "data-aware" y reconoce los campos "BLOB" de una base de datos, soporta los formatos de imagenes web estandars (jpg, gif, bmp y png).

8.- DBWebSound: Un web control, que permite reproducir un archivo de sonido, tambien es "data-aware" y soporta campos "BLOB", adicionalmente le puedes especificar una cadena, cuando es cadena esta debe de ser el nombre de una archivo de sonido, pudiendo ser un archivo mp3, wav, wma, etc.

9.- DBWebVideo: Un control muy parecido al anterior, solo que este es para archivos de video, igual soporta campos "BLOB" y string, cuando es cadena se especifica el nombre del archivo de video.

10.- DBWebLabel: Igual que un Label normal, solo que este es "data-aware" :)

11.- DBWebLabeledTextBox: Es una extension de un TextBox, "data-aware" pero con un Label adjunto, se puede especificar el caption a usar y la posicion de este.

12.- DBWebListBox: Es como un control ListBox con propiedades Lookup y con acceso a datos.

13.- DBWebMemo: Un control que deriva de un TextBox, solo que multilinea, con acceso a datos.

14.- DBWebNavigator: Un control navegador de datos, en la comunidad mencionaron algo parecido, es como un BindingNavigator, parece ser que los usuarios de VS no lo tenian en .Net 1.1, con botones para los registros como Siguiente, Anterior, Primero, Ultimo, Refresh, Agregar, Borrar.

15.- DBWebNavigationExtender: Esta clase actua como un extensor para cualquier control estandar web, para que actuen como controles "data-aware" y tambien operaciones de navegacion como siguiente, anterior, refresh, etc.

16.- DBWebRadioButtonList: Este control encapsula una serie de RadioButton, por default son 3, el control se acomoda automaticamente segun el numero de radiobuttons y captions que se especifiquen. Como todos los controles de esta pestaña, tiene acceso a datos.

17.- DBWebTextBox: Pues a que no adivinan... es lo mismo que un TextBox comun, solo que con acceso a datos, es decir le puedes especificar un dataset, una tabla y un campo donde leer o guardar los datos.

miércoles, agosto 16, 2006

ADO .Net ---> BDP

El lunes pasado fue la reunion de la Comunidad .Net de Juarez, y se hablo de ADO .Net, y pues para los que fueron y utilizan Delphi .Net (como los compañeros de trabajo), pues vamos a hablar de BDP (Borland Data Provider), BDP es un modelo de datos alterno a ADO .Net y esta disponible desde que salio el .Net Framework 1.0, por ahora vamos a listar los componentes que se incluyen en BDP, estos componentes son estandars y vienen con el Delphi y no estan disponibles por separado, digamos que es un beneficio extra para los que desarrollan aplicaciones .Net con Delphi.

Estos componentes los encuentras en la Tool Palette (En VS se llama ToolBox), en la pestaña que dice Borland Data Provider y son los siguientes:

BdpConnection .- Se utiliza para establecer una conexion con una base de datos, algo parecido a lo que vimos en la comunidad donde mencionaron clases como SqlConnection, OracleConnection, etc.. tambien mencionaron que en .Net 2.0 se implemento algo asi como basado en un modelo de proveedor, no recuerdo el nombre que dijeron exactamente, pero en estos dias investigo.. llamado ADO.NET 2.0 Factory Classes (Gracias a KaMiKaZe por recordarmelo). Bien pues como decia, Borland ya implemento algo muy parecido desde hace rato, con la clase BDPConnection te puedes conectar a alguna de las siguientes bases de datos (sin tener que utilizar otro componente o clase): IBM DB2, Borland Interbase, Microsoft Access, Microsoft SQL Server, Oracle Database, SyBase y MySql.. solo configuras el connection string ya sea visualmente o con codigo y asi puedes cambiar de manejadores de bases de datos facilmente.

BdpCommand .- Equivalente a SqlCommand, OracleCommand, etc.. Solo que para ser usado con un BdpConnection y por consiguiente en cualquiera de las BD's que soporte BdpConnection.

BdpDataAdapter .- Equivalente a SqlDataAdapter, etc.. Para ser usado con BdpConnection.

BdpCommandBuilder .- Equivalente a SqlCommandBuilder, etc. Para ser usado con BdpConnection.

BdpCopyTable .- Con este componente o clase, podemos copiar una tabla a otra tabla... jajaja, uy que sofisticado me salio... bueno lo interesante de esta clase es que copia la estructura, las llaves primarias, los datos y ademas se encarga de la migracion de los datos... o sea como?? o sea que con esta clase podemos copiar una tabla de sqlserver y guardarla en oracle :)) y la clase se encargara de crear la nueva tabla, primary key, y migrar los datos a la nueva base de datos.

DataHub .- Esta clase sirve como "puente" entre las clases DataSync y un Dataset. Trabaja junto con DataSync para proveer y resolver un DataSet desde multiples fuentes hetereogeneas... whatta?? pues un dataset ya sea de sqlserver o de oracle o de db2, etc... de multiples fuentes, esta clase se usa cuando transfieres remotamente un dataset desde otra aplicacion o aplicaciones multiples con conexiones a diferentes manejadores de bases de datos... bueno ya veremos algunos ejemplos despues..

DataSync .- La clase que resuelve y provee un Dataset desde multiples fuentes hetereogeneas.. mmm, otra vez... recordemos dijimos que trabaja en conjunto con DataHub... ahh, esta un poco complejo de tratar de explicar escribiendolo, creo que lo mejor sera cuando hagamos un ejemplo :))

RemoteConnection .- Esta clase sirve para establecer una conexion con una clase remoteserver, que por supuesto estara en una aplicacion remota. Funciona en conjunto con DataHub y DataSync, claro tambien se necesita RemoteServer... igual, ya veremos un ejemplo :)

RemoteServer .- Se utiliza para "servir" y administrar peticiones de multiples clientes. Estos ultimos cuatro componentes se utilizan en conjunto para implementar de manera sencilla aplicaciones two-tier o three-tier (doble capa o multicapas)... Bueno, esto es un vistazo rapido a los componentes que nos proporciona Delphi para acceso a datos, en los siguientes dias vamos a ir haciendo programitas de ejemplo para ir viendo como se utilizan e ir aprendiendo mas.

 

Si eres principiante o quieres repasar, les voy a dejar unos links de unos screencast's de introduccion al Turbo Delphi. El autor planea publicar 30 screencast's hechos con Turbo Delphi. (Realizados por Nick Hodges)

1.- Introducción al IDE (Post completo Aquí)

2.- Hello World (Post completo Aquí)

3.- Aplicaciones Basicas (Post completo Aquí)

Saludos a Ivonne Santillan que ya se fue a refugiar a su casita y esperar la llegada del nuevo miembro de la familia!!!

domingo, agosto 13, 2006

Programas, Herramientas, Chucherias

Al momento de desarrollar cuantas veces no necesitamos editar una imagen? Cambiarla de formato o cambiarle colores, escalarla o x cosa... Bueno como muchos de nosostros somo pobres y por lo tanto "open sourceros" pues voy a recomendarles algunas herramientas:

Para las imagenes pues muchos pensaran primero en Gimp, que es muy bueno, pero en lo personal me gusto mas el Paint .Net (que no tiene nada que ver ni es el sucesor del paint de windows), les dejo los links para que los prueben y vean que estan buenisimos, por supuesto son Open Source o Free....

Paint . Net
http://www.getpaint.net/

Gimp
http://www.gimp.org/

Ah, pero si tu desarrollo es mas sofisticado y hasta animaciones te avientas, pues ahi esta el programa para hacer animaciones que no le pide nada a otros comerciales.... Blender, excelente ahi les dejo el link para quien tenga el tiempo suficiente... y por supuesto si quieres "renderear" una imagen puedes hacerlo con un plugin para el Blender llamado Yafray...

Blender
http://www.blender.org

Yafray
http://www.yafray.org/


Y antes de que se me olvide, ya que hablamos de lenguajes, si como yo, te gusta el Delphi, pues no dejes de echarle un ojo a Chrome, un "nuevo" lenguaje de programacion tambien basado en Object Pascal y diseñado para .Net y Mono (Y por cierto despues lo analizaremos mas a fondo en un post a futuro), solo que este es una especie de plugin y puede ser usado dentro de Visual Studio, segun esto fue creado para superar o hacer mas faciles ciertas limitaciones de C# y de Delphi (Por cierto C# es muy similar y esta influenciado por Delphi, si ya se que va a pillar mas de uno diciendo que no, que estoy loco... pero investiguen en la red y veran, sobre todo porque el mero mero (Anders Hejlsberg) de C# tambien fue el mero mero en la creacion de Delphi) la verdad solo conozco de la existencia de Chrome y he leido su pagina pero no me he dado el tiempo para probarlo y eso que se ve muy interesante... asi es que despues lo veremos juntos, que les parece?


Chrome
http://www.chromesville.com/


Bueno, solo tuve el tiempo para postear un poco, asi es que nos vemos pronto!!

Saludos a Jeenifer Espino!!

jueves, agosto 10, 2006

Beginners

Varios amigos me han comentado que no saben nada de .Net, asi es que hoy solo les voy a evitar la fatiga de andar investigando y les dejo unos links del buen Alex (un saludo y nos vemos el proximo Lunes en la reunion de la comunidad .Net) que ya se encargo de investigar lo que es y para que sirve el .Net, del lado derecho pueden ver la lista de los posts anteriores, y regresarse a la tarea 1 que ahi empieza lo que es .Net

Que es tecnologia .Net?

Que es un Assembly?

Ultima tarea resuelta?


Y claro no dejen de escuchar los podcast's de Carlos Madrigal (http://podcast.pozotecnico.com/) y de Raul Guerrero (http://superneurona.blogspot.com/) que hablan de desarrollo en .Net y otras pulgas y garrapatas, si les da flojera leer, pues escuchen los podcast de ellos que estan en mp3 y los echan a su iPod (yo prefiero un iRiver) para que los escuchen en el auto (excepto en el avion pk luego los van a acusar que son terroristas y el iPod es el detonador) y/o camino a casa!!

Hasta pronto y un saludote a Liz Enriquez que nos lee desde las tierras de Santiago Papasquiaro!!

miércoles, agosto 09, 2006

Declarando clases en Delphi .Net

Algunos de mis amigos que han programado en Delphi (win32) me han preguntado y comentado que han tratado de hacer un programa en Delphi .Net pero que nomas no le han entendido muy bien, para empezar pues tenemos que mentalizarnos que las cosas van a ser diferentes, que vamos a usar un "Framework nuevo" y por lo tanto las clases disponibles cambian, la migracion no es tan sencilla como podria parecer... Pues vamos a ir viendo poco a poco algunas diferencias....

Lo primero que vemos que cambia para los que estamos acostumbrados al Delphi win32, son que las clases traen nuevos atributos de visibilidad para los miembros de la clase (que algunos tambien entran para win32 a partir de BDS 2005), en Delphi existen las siguientes palabras reservadas para especificar la visibilidad de un miembro: private, protected, public, published, strict private, strict protected y automated (esta ultima es solo para win32), de ahi que la declaracion de una clase en delphi .Net puede llevar la siguiente estructura:

UnaClase = Class
strict private
... // declaraciones strict private en esta seccion
strict protected
... // declaraciones strict protected en esta seccion
private
... // declaraciones private
protected
... // declaraciones protected
public
... // declaraciones public
published
... // declaraciones published
end ;



Cabe destacar que no es necesario indicar cada una de las secciones, una clase solo puede constar de private y public o inclusive sin definir ninguna, si no se especifica por default son published si esta activo {$M+} o de lo contrario son public, es valido declarar una clase asi:


UnaClase = Class(System.Object)
private
... // declaraciones private
public
... // declaraciones public
end ;


Recordemos que nuestra "mother" es la clase System.Object {UnaClase = Class(TObject) es lo mismo} , por default todas las clases derivan de esta clase y si no se especifica pues de todos modos desciende de la clase Object, ssss, a huevo...

Y que diantres significa todo esto? pues es solo el nivel en el que son visibles los miembros de una clase (sea metodo o campo), un miembro strict private es visible solo dentro de la clase en la que se declararon, un miembro strict protected puede ser accesado dentro de la clase en que se declara y desde cualquier clase descendiente sin importar donde sea declarada, los miembros declarados como private son visibles dentro de toda la unidad (Unit xxx) donde esta la clase declarada, los miembros declarados protected tienen la misma visibilidad del private, mas aparte pueden ser accesados desde cualquier clase descendente declarada en otra unidad diferente, un miembro public es visible desde cualquier lado en que la clase pueda ser referenciada, por ultimo un miembro published tiene la misma visibilidad que un miembro publico, la diferencia es que un miembro published genera informacion extra llamada "runtime type information" (RTTI) esta informacion se usa principalmente para mostrar las propiedades en el Object Inspector en tiempo de diseño....

Bueno, es todo por hoy, espero y no se haya hecho demasiado aburrido, pero asi podemos empezar comprendiendo mejor desde la declaracion de las clases e ir entrando poco a poco a .Net, los que ya saben todo esto pues si estoy echando mentiras no duden en hacermelo saber y asi aprender mas :)), tambien cualquier critica, comentario, sugerencia, queja, etc....

Saludos a Fernando Hernandez que hoy me lo encontre en el messenger...

Turbo Delphi

Bueno, vamos a entrarle a esto de los blogs, que en realidad este blog lo cree en el 2004, pero solo escribi unas cosas de caracter personal y pues vamos a darle borron y cuenta nueva!! Primero que nada un saludo a todos los miembros de la comunidad .Net de Cd. Juarez, por ahi conoci a Carlos Madrigal, Pepe devora, Alex Briseño y ya que andamos saludando gente pues un saludote a Juan Hidalgo, Roberto Escobedo alias el Benito que anda por las tierras francesas, al Toño, a Luis Felipe Gonzalez y a otros personajes que se me va el nombre, mil disculpas por todos los que no mencione :)... claro un saludo muy especial a Veronica Avitia.....

Gracias a ellos descubri el pozo tecnico y me volvi pozolero, y tambien escucho el podcast de Raul Guerrero, hasta conoci al Bombetito en la reunion a la que fue en Cd. Juarez... tal vez alguno de ellos conozca quien soy o tal vez no... no lo se.. bueno tratare de recordarles y al que no me conoce pues pa que me conozca, jejeje... Mi nombre es Edgar Montoya, desde hace muchos años he tenido que ver con el "semidesarrollo" o desarrollo de software... claro aun me falta mucho por aprender y no me jacto de ser un programador pragmatico asi es que le vamos haciendo la lucha para acercarnos cada vez mas... Pero a pesar de que me la paso con .Net, asisto a las reuniones de la comunidad .Net de cd. Juarez, pues que creen, soy borlander DevCo y utilizo mayormente las herramientas de Borland, principalmente el Delphi, o en su ultimo caso el Borland Developer Studio... Asi es que este blog sera un poco mas de .Net, pero utilizado con Delphi... asi es que espero y no sea igual a los de los compas... a lo mejor y tiene menos interes pero yo se que por ahi debe de andar alguno que otro que tambien utiliza Delphi y le gustaria saber un poco mas.

Pues es buena oportunidad para que aprendamos cada vez mas y claro tambien vamos a experimentar con herramientas de "ms" e ir aprendiendo mas de C#.

Despues de ese largo choro, y ya para no hacerla mas larga, pues vamos a empezar con una noticia relacionada... Borland (o como se vaya a llamar la compañia o division que se va a encargar de el) planea sacar versiones "Turbo" de sus productos, entre ellos se anuncian:
Turbo Delphi, Turbo Delphi .Net, Turbo C++ y Turbo C#, todos ellos con dos versiones, la version Professional y la version Explorer, lo bueno de todo esto es que las versiones Explorer seran Free o Gratis pa los de este lado del charco.... Algo asi como lo son las versiones Express del Visual Studio.. Se planea su salida para mas o menos dentro de 28 dias... censored, jajajajajajaja....

Para mas informacion pueden visitar el siguiente sitio:

http://www.turboexplorer.com/

Ahh, y para los que quieran ver un video de Turboman.....

Saludos y nos vemos pronto.... espero postear seguido como "Pepe" que al parecer esta rompiendo records ya que lo mencionan por todos lados!