13 de juny 2008

Orientat a objectes

Aquests dies estic submergit en un projecte que vaig decidir fer amb C (que no C# [versió de C de Microsoft] ni C++). I bé, ja em trobo amb problemes per a poder trobar documentació de coses concretes, més que res, el problema principal és la similitud del nom C amb C++. [poses el google qualsevol cosa més "C", et surten un futimer d'entrades que no fan referència a C, si no a C++]

Es diu que la orinetació a objectes es va inventar perquè els xinesos i els indis ja començaven a aprendre a programar, i com que ells se'ls hi donava molt bé la programació, van tenir por que els programadors americans i europeus no es quedessin sense feina. Així doncs, que un tal Bjarne Stroustrup (nom certament, impronunciable; clar que depèn de la llengua natal del lector(espero)) es va treure de la màniga el C++.

També es diu, fins i tot que amb C++ es pot definir l'univers sencer (dah!). Però en fi, res que no puguin fer els altres llenguatges, total, estarà limitat pel que pugui arribar a executar una màquina de Turing. Amb els llenguatges orientats a objectes un sol fer un objecte per a cada cosa que se li pugui passar pel cap: si fessim un videojoc, tindríem un objecte per a cada objecte de l'escenari: un edifici, un objecte; un arbre, un objecte; un cotxe, un objecte; una espasa, un objecte; un personatge, mil objectes agrupats en un sol objecte; una acció que pot fer el personatge, un objecte; I així sense parar. En un llenguatge com ara C, tant sols tindríem una estructura per a tots i cadascun dels objectes 3D i prou, tractant així tots els objectes 3D iguals i no tenir els mals de caps de si aquesta classe té aquesta funció o no la té o és heredada de l'altre o si al ser una classe abstracta bla, bla, i la interfície aquesta més bla, bla, bla. Al cap i a la fi, és aplicar el sentit comú, tots els objectes 3D tenen els seus polígons, les seves textures i lo que et dongui la gana, així doncs perquè tractar diferent el braç esquerra del protagonista que la pedreta que hi ha al mig del camí o que l'espasa que té l'enemic final? Sentit comú si us plau.

També és el que passa quan vols gestionar una base de dades, els programadors de Java i C++ no els hi agrada posar sentències SQL ni instruccions XSLT (per accedir a dades en fitxers XML) entremig del seu codi. I aleshores es monten la seva propia pel·lícula transformant les dades de disc en els seus objectes, que aleshores ja poden manipular.

Fent això, resulta que al final, has de mantenir dos sistemes, el de dades i el dels teus objectes. Doble feina! És molt més senzill no posar tantes capes, i que el teu programa faci directament les crides a SQL o faci accessos XSLT als arxius XML i que del resultat obtingut n'obtingui les dades que es busquen i no que en creii un objecte per després poder començar a fer la feina.

Per tant, IMHO, crec que això de la programació orientada a objectes no és altre cosa que malgastar recursos (temps dels programadors i temps de computació). I el que haurien de fer els informàtics és fer servir més el sentit comú i dir, si per accedir aquestes dades s'ha d'executar tal instrucció SQL, doncs l'executes i no fer-se aquí un objecte, al que accedint les seves variables (privades, of course) modifiquis les dades [Perquè després, necessitaràs la mateixa instrucció SQL per guardar les dades que has modificat: faràs dos cops la mateixa feina!].

En principi, aquest sistema de fer capes, és per la portabilitat i pel fet de que si es canvia de bases de dades, no s'hagi de modificar tot el programa, si no només la base de dades i les funcions d'accés a la base de dades. Però clar, cada quan es canvia de base de dades? A més, si està tot ordenat i ben organitzat, al fnal, també l'únic que s'haurà de canviar seran les funcions d'accés a base de dades i prou. Per tant, no es guanya absolutament res de res. És una il·lusió que fa creure als programadors que tot és molt més senzill, però que en realitat és un recurs que obliga a treballar el doble. [a informàtica treballar el doble, vol dir trobar-te tres vegades més d'errors, que el teu programa tardarà 4 vegades més i que el programador tindrà 5 vegades més mals de caps (proporcions fetes a ull sense cap estudi científic més que la pròpia experiència :P)]

3 comentaris:

Darth Semi ha dit...

y to esto que quie disir...

Neioo ha dit...

k in la univirsidad mucho tudiar pá ná.

Spiegel ha dit...

asi q todo es culpa de la sociedad... era malo por la sociedad... clar...

en fin neioo, per gustos els colors q diuen..

si esta orientat a objectes, el codi es molt mes reusable, tot i q es veritat q fer un objecte pel dit petit i un altre pel dit index, pos mira... pero tb es veritat q si pel q sigui vols reutilitzar despres i reutilitzar el personatge, en un altre entorn, si son objectes en principi u pots fer...

en fin q al final cadscu q su monti com vulgui...si al final tot serveix, mes o menys... pero serveix...(per a fer pagines pr0n clar)

jo q se... tu informatico, faras el programa del universo, i l'usuari parara malament el pc, i la font d'alimentacio es cremara, o desconectara un usb a saco, o voldra una wifi encara q tu li diguis q no... i aixi anem:P
(per aixo micro$oft deixa les coses a mig fer? deu pensar baah si el 1er pringat q pasi u trencara :P)