viernes, 14 de agosto de 2009

OBJECTIVE-C

OBJECTIVE – C

Marco Teorico:

Objective-C es un lenguaje de programación orientado a objetos creado como un superconjunto de C pero que implementase un modelo de objetos parecido al de Smalltalk. Originalmente fue creado por Brad Cox y la corporación StepStone en 1980. En 1988 fue adoptado como lenguaje de programación de NEXTSTEP y en 1992 fue liberado bajo licencia GPL para el compilador GCC. Actualmente se usa como lenguaje principal de programación en Mac OS X y GNUstep.

Historia

A principios de los 80, el software se desarrollaba usando programación estructurada. La programación estructurada se estableció para ayudar a dividir los programas en pequeñas partes, haciendo más fácil el desarrollo cuando la aplicación se volvía muy grande. Sin embargo, como los problemas seguían creciendo al pasar el tiempo, la programación estructurada se volvió menos útil ya que más sentencias tenían que ser escritas una y otra vez, llevando a código espagueti y dificultando la reutilización de código.

Muchos vieron que la programación orientada a objetos sería la solución al problema. De hecho, Smalltalk ya tenía solucionados muchos de estos problemas: algunos de los sistemas más complejos en el mundo funcionaban gracias a Smalltalk. Pero Smalltalk usaba una máquina virtual, lo cual requería mucha memoria para esa época, y era demasiado lento.

Objective-X fue creado principalmente por Brad Cox y Tom Love a inicios de los 80 en su compañía Stepstone. Ambos fueron iniciados en Smalltalk mientras estaban en el Programming Technology Center de ITT en 1981. Cox se vio interesado en los problemas de reutilización en el desarrollo de software. Se dio cuenta de que un lenguaje como Smalltalk sería imprescindible en la construcción de entornos de desarrollo potentes para los desarrolladores en ITI Corporation. Cox empezó a modificar el compilador de C para agregar algunas de las capacidades de Smalltalk. Pronto tuvo una extensión para añadir la programación orientada a objetos a C la cual llamó «OOPC» (Object-Oriented Programming in C). Love mientras tanto, fue contratado por Shlumberger Research en 1982 y tuvo la oportunidad de adquirir la primera copia de Smalltalk-80, lo que influyó en su estilo como programador.

Para demostrar que se hizo un progreso real, Cox mostró que para hacer componentes de software verdaderamente intercambiables sólo se necesitaban unos pequeños cambios en las herramientas existentes. Específicamente, estas necesitaban soportar objetos de manera flexible, venir con un conjunto de bibliotecas que fueran utilizables, y permitir que el código (y cualquier recurso necesitado por el código) pudiera ser empaquetado en un formato multiplataforma.

Cox y Love luego fundaron una nueva empresa, Productivity Products International (PPI), para comercializar su producto, el cual era un compilador de Objective-C con un conjunto de bibliotecas potentes.

En 1986, Cox publicó la principal descripción de Objective-C en su forma original en el libro Object-Oriented Programming, An Evolutionary Approach. Aunque él fue cuidadoso en resaltar que hay muchos problemas de reutilización que no dependen del lenguaje, Objective-C frecuentemente fue comparado detalladamente con otros lenguajes.


Reconocimiento por medio de NeXT

En 1988, NeXT, la compañía que inició Steve Jobs después de Apple, licenció Objective-C de StepStone (el propietario de la marca Objective-C) y lanzó su propio compilador y bibliotecas de Objective-C en los que se basaba la interfaz gráfica de NeXTSTEP. Aunque las estaciones de trabajo de NeXT fueron un fracaso, las herramientas fueron muy alabadas en la industria. Esto llevó a NeXT a dejar la producción de hardware y enfocarse en herramientas de software, vendiendo NeXTSTEP y posteriormente OPENSTEP como plataformas para programación.

El proyecto GNU empezó a trabajar en una versión libre de NeXTSTEP, llamada GNUstep, basándose en el estándar OPENSTEP. Dennis Glatting escribió el primer entorno de ejecución gnu-objc en 1992, y Richard Stallman escribió el segundo poco tiempo después. El entorno GNU Objective-C, usado desde 1993, es el desarrollado por Kresten Krab Thorup cuando era un estudiante universitario en Dinamarca.

Después de adquirir NeXT en 1996, Apple usó OpenStep en su nuevo sistema operativo, Mac OS X. Este incluía las herramientas de desarrollo de NeXT, Project Builder (luego reemplazado por Xcode) y también el diseñador de interfaces, Interface Builder. La mayoría de la API actual de Cocoa está basada en OpenStep, siendo el entorno de Objective-C más importante para desarrollar software.

Aprender libobjects

libobjects son las librerías de clases de GNU para Objective-C. En concreto se trata de librerías de uso general no gráfica. Se puede decir que libobjects son para GNU's Objective-C lo que libc++ para GNU's C++. En un futuro se pretende cambiar el nombre de estas librerías por el de "GNUStep Base Library".
Estas librerías están todavía sin acabar.
El proyecto que está desarrollando estas librerías está liderado por el investigador del MIT R. Andrew McCallum

Objective-C++

Objective-C++ es un lenguaje que surgió en los tiempos de NeXTSTEP. Este lenguaje permite mezclar código fuente C++ y Objective-C en el mismo fichero fuente, así como llamar a objetos C++ desde Objective-C y viceversa. Lo cual permite al programador Objective-C utilizar todas las librerías de C++ existentes, y al programador C++ acceder a toda la libraría de Cocoa.
Los ficheros Objective-C++ llevan las extensión .mm ó .M (extensión antigua que se mantiene por compatibilidad).

Aunque inicialmente Mac OS X no lo incluía, a partir de Septiembre del 2001 Apple, tras las continuas peticiones recibidas por parte de los desarrolladores, anunció que lo incluiría y así lo hizo metiéndolo como parte del gcc a partir del gcc 2.95.2, que se viene con Mac OS X 10.1

El mejor tutorial de Objective-C++ que conocemos le ha escrito Josh Anon del departamento de computación de la McCormick School of Engineering Northwestern University. El tutorial en formato PDF podemos bajárnoslo de aquí.

Iphone
Objective-C es el lenguaje usado para desarrollara aplicaciones para el iPhone, que tiene una obvias diferencias con la programación regular, tales como:
El manejo de memoria en el iPhone no es igual al de una computadora.
Se requiere Cocoa Touch (API para aplicaciones desarrolladas para el iPhone).
Ayuda tener algún conocimiento previo en programación, especialmente OOP.
¿Qué es una aplicación web?

Se trata de las aplicaciones normales desarrolladas en HTML + CSS + JavaScript, que corren del lado del servidor y son vistas en el navegador Safari. Dichas aplicaciones pueden ser desarrolladas en PHP, NET, Java, etc y generar el código HTML necesario para poder ver nuestra aplicación corriendo en el Iphone. Con CSS ya podemos darle el toque final para que sea muy similar a una aplicación de escritorio (si se desea).
¿Qué es una aplicación nativa?

Los usuarios de iphone ya vienen acostumbrados a este tipo de aplicaciones, en realidad son todas aquellas que fueron descargadas desde AppStore y fueron instaladas directamente en el dispositivo, a ello se le suma que no es necesario tener una conexión a internet ya que estas no corren en el navegador. Estas aplicaciones son desarrolladas con el SDK de Iphone: xCode en
Objective C.
Diferencias y ventajas
Al desarrollar aplicaciones web, no dependes de Apple para su distribución y mas aún para su aprobación. Sin embargo, al crear una aplicación nativa, tienes acceso al API del iphone y poder por ejemplo usar el acelerómetro, la camara el GPS, etc.
Una aplicación nativa requiere conocimientos de Objective C y para crear una aplicación web no es necesario.
Con la aplicaiones web, no necesitas registrarte como desarrollador en Apple siendo estas de libre acceso, mientras que con las aplicaciones nativas podemos cobrar por su descarga si así lo deseamos.
¿Cómo trabaja una aplicación nativa?
Para explicar esto, nos apoyaremos en una imagen que proporciona apple.
Empezamos diciendo que aprendiendo Cocoa Touch ya puedes crear aplicaciones no solo para el iphone o ipod, sino para toda la familia Mac OS. Ya que estos dispositivos trabajan con una copia similar a la que usan las mac.
Core OS: Es la base o el nucle del sistema operativo y es responsable, entre otras cosas, de gestionar los archivos, la memoria, seguridad y la comunicación.
Core Services: Provee los servicios fundamentales de la aplicación, por ejemplo puedes acceder a la lista de contactos, al SQLLite o a las preferencias.
Media: Aquí está todo lo referente a Multimedia: video, audio, archivos de imágenes, Core Animation, OPENGL ES, etc.
Cocoa Touch: No es más que el Framework de desarrollo para el Iphone, que en realidad es el más importante y con el que, en la medida de las posibilidades, trabajaremos. Intentando siempre usar esta capa para nuestro desarrollo.
Pero, ¿qué usaremos?
Cocoa Touch
Como ya mencionamos, Cocoa Touch es el API para el desarrollo de aplicaciones orientado a objetos. Esta incluse a su vez 3 frameworks que usaremos para poder trabajar con el iphone:
UIKit, que proporciona todos los elementos gráficos para nuestra aplicación mediante interfaces a su framework.
Fundation Framework, es el conjunto de clases que utiliza para representar estructuras de datos complejas.
Address Book UI Framework, nos ayuda a acceder a los datos de nuestros contactos.
Objective C
Es un lenguaje de programación basado en C, y que ha sido modificado para poder trabajar orientado a objetos, con lo cual puedes crear clases, objetos, variables de instancias, métodos, encapsulación, etc.
Conclusión
Es importante remarcar, que Objective C no es Java, PHP, NET, ActionScript, etc,es totalmente distinto, y necesitaras esforzarte para aprender a programar si estás acostumbrado a estos lenguajes. Sin embargo, si alguna vez desarrollaste en C o C++, tendrás muchas más ventajas para entenderlo.

Links de interés

El lenguaje Objective-C para programadores C++ y Java

Un buen tutorial sobre Objective-C es el escrito por Apple es:

The Objective-C 2.0 Programming Language (Apple)

Apress y Sams Publishing tienen nuenos libros sobre Objective-C, estos libros no suponen conocimientos previos de programación, pero acaban explicando todo el lenguaje y también parte del Foundation Framework:

"Programming in Objective-C 2.0 (2nd edition)"STEPHEN KOCHANEd. Sams Publishing

"Learn Objective–C on the Mac"MARK DALRYMPLE, SCOTT KNASTEREd. Apress

O'Reilly también ha sacado un libro sobre Objective-C. Aunque el libro es pequeño (128 páginas) es completo porque va al grano, eso sí, supone que el lector ya conoce C y C++:
"Objective-C Pocket Reference"ANDREW DUNCANEd. O'Reilly

Otro buen tutorial introductorio lo encontramos en CocoaLab bajo el nombre:

Become a Xcoder

R. Andrew McCallum investigador del MIT y miembro del proyecto GNUStep tiene también un buen tutorial sobre Objective-C aquí:

http://www.delorie.com/gnu/docs/libobjects/libobjects_toc.html

Buenos tutoriales introductorios son:

A 10-Minute Introduction to Objective-C (Paul Burchard)
OO Programming in Objective-C (Michael Chui)
Objective-C (Gerrit Huizeng)
Objective-C Cheezmud Sample Source Code (Dave Flater)

Otras fuentes de información son:

OO Programming and the Objective-C Language
Objective-C, Publications, Books, Articles, Interviews, etc. by Brad Cox
Object-Oriented Language: Objective-C, a lot of useful information about Objective-C
Optimizing Objective-C Code
Objective-C Resources and links on the Swarm site
Objective-C Blocks - Blocks for Objective-C (David Stes)
Object-Oriented Programming : An Evolutionary Approach by Brad J. Cox, Andrew J. Novobilski
The Objective-C Language by Mike Beam


Otros recursos

Existen unas buenas FAQ sobre Objective-C aquí:
ftp://rtfm.mit.edu/pub/faqs/computer-lang/Objective-C/faq
También existe un grupo de news dedicado a Objective-C en:
news:comp.lang.objective-c

Enlaces

http://macprogramadores.org/
http://es.wikipedia.org/wiki/Objective-C
http://www.cristalab.com/tutoriales/fundamentos-de-programacion-para-iphone-c260l/

viernes, 12 de junio de 2009

FASE DE CONCEPTUALIZACIÓN

FASE DE CONCEPTUALIZACION



Sobre el esquema lógico extraído en la fase de extracción, Se aplican diferentes procesos que permiten generar un esquema conceptual. Estos procesos ocurren en la fase de conceptualización, durante la cual se explicitan las estructuras conceptuales que derivaron en las estructuras de datos implementadas. esta fase produce como salida un esquema conceptual utilizando algún modelo semántico. Este modelo semántico se almacena en una estructura a la que genéricamente se denomina base de datos semántica. En la base de datos semántica se almacenarán los objetos conceptuales y los vínculos existentes entre ellos.Básicamente la fase de conceptualización trabaja sobre un esquema lógico extraído en la fase de extracción aplicando diferentes procesos que nos permiten generar un esquema conceptual, utilizando algún modelo semántico a partir del esquema lógico, y aplica algunos algoritmos que nos permite obtener información de las estructuras conceptuales que las hemos obtenido atreves de la fase de extracción.



Modelo Semántico



No es más que la representación de los esquemas en los modelos entidades relación. En forma general, denominaremos especificación semántica a la colección de información de los objetos y los vínculos entre ellos. La especificación semántica se almacena en una base de datos semántica (SDB), a los efectos de ser procesada por los algoritmos de conceptualización encargados de generar un modelo conceptual.

lunes, 20 de abril de 2009

Importancia del usuario en una Reingeniería

Para entender que tan importante es la participación de los usuarios en una Reingeniería de Bases de Datos debemos empezar a entender que:
La reingeniería es una alternativa útil para la industria del software, ya que se trata de una actividad que permita incrementar la facilidad de mantenimiento, reutilización y evolución de sistemas software. En concreto, su aplicación a las bases de datos es útil por que el acceso a los datos en una forma rápida y eficaz es una necesidad, la reingeniería de base de datos es entonces una tarea de gran utilidad para las empresas, por que permitirá mejorar los productos y servicios que puedan ofrecer.
El proceso de reingeniería de bases de datos, consiste en la recuperación mediante distintos métodos de toda la información de las distintas vistas (física, conceptual y lógica) de la base de datos actual para en posteriores etapas conseguir modificar y rediseñar el esquema conceptual, transformando la base de datos anterior en otra base de datos. Este proceso conlleva entre otros aspectos de vital importancia, la migración de datos de la Base anterior a la Base nueva.

¿Su importancia entonces?

Los usuarios aportan su conocimiento de las bases de datos existentes, así como de mejoras que pretenden realizar, para esto lo que se debería hacer es una participación mas dinámica de los usuarios en la generación de información y facilitando su presencia en la fase de análisis y diseño en el proceso de reingeniería, tratando de que el usuario no se sienta forzado a participar, sino que se vea como un elemento fundamental en el proceso de reingeniería. el cual puede aportarnos información muy sensible e importante.

El usuario debería aportar con sus ideas, ya que son ellos los que van a utilizar diariamente el sistema; aquellas actividades que no contribuyan a satisfacer las necesidades del usuario, deberán ser minimizadas, deberá buscarse entonces que los procesos y las actividades se efectúen en paralelo.

De esta manera el usuario aporta a la tarea de la reingeniería para mejorar y obtener un nuevo sistema que cumpla con las características deseadas para la empresa.