lunes, 24 de septiembre de 2012

Lo que extraño de C++


Hola:
         Hoy quiero comentarles algunos choques que tuve cuando me enfrenté a C# viniendo del mundo C++, las cosas que extraño, aunque reconozco que no son muchas, ya que C# realmente tiene innumerables beneficios y por eso hoy es mi lenguaje favorito (no sé mañana).
       
Extraño de C++:

- Las STL: Significan Standar Template Library y traen un conjunto de clases realmente útiles. Tiene una serie de contenedores y los que mas he usado han sido la clase vector (que es como un array pero con métodos que te simplifican la vida), list y deque, sobre todo el deque, ya que este internamente funciona como un list, pero con la sintaxis de un vector, es decir, no necesita iteradores para recorrerse como el list y por lo tanto su sintaxis es menos tediosa. Por qué esto es importante, porque un vector ocupa siempre un bloque de memoria contiguo, es decir que si no hay un bloque de memoria contiguo, se producirían errores, un fallo de memoria o el sistema alertaría de que no hay memoria, es difícil que ocurra hoy con las máquinas que existen, pero pensemos en grandes volúmenes de datos que extraemos de una base de datos y queremos colocarlos en una grilla, si falta memoria, se produce un error, ahí es donde entran en juego los list y los deque, los mismos buscan los lugares vacíos que no necesariamente tienen que ser contiguos. Lo mas parecido a las STL son las Generics de C# en donde la mas usada es la clase List, pero extraño las STL porque hice muchos trabajos con las mismas y por ende les había agarrado la mano. Iguál las Generics no sólo las reemplazan, sino que mejoran en muchos aspectos.

- Tirar una "funcioncita" al aire: Cuando tengo que hacer un método de una clase que a su vez debería usar en varias clases, es ahí donde digo "volvé C++" (hasta que lo pienso mejor) porque en C# o debo hacer una clase especialmente e instanciarla luego o debo crear una Interfaz que contengan su definición y heredar en la clase la misma o bien hacer un método en cada clase que haga lo mismo. Siempre preferí tener una función que haga tal cosa y tenerla en un archivo .h que coloco como cabecera y poder llamarla desde cualquier recóndito rincón de código sin muchos tapujos. Yo sé que los programadores orientados a objetos extremistas me van a pegar el grito en el cielo debido a que va en contra del nuevo orden mundial de programación, pero yo prefiero no ser "extremista" cuando los tiempos te comen, en estos casos se necesita ser "simplista".

- La herencia múltiple: Como todos saben tanto Java y C# no permiten herencia múltiple, sí permiten herencia simple entre clases y múltiples herencias desde Interfaces. Podrán decir que se reemplaza la herencia múltiple con herencias de herencias, es decir un nieto, puede acceder a su padre y su padre a su padre, entonces el nieto puede acceder a su abuelo también, pero en C++ uno heredaba desde donde quería, lo que quería. Es cierto que si existían dos métodos entre las clases que se heredaban que eran iguales, traía inconvenientes, pero si se sabía usar era muy pero muy útil.

- Las etiquetas public, private y protected: Cuando uno creaba métodos en las clases o atributos uno simplemente hacía:
public:
void funcion();
void talcosa();
int a;
private:
int b;
void talotra();

y de esta manera lo que estaba debajo de cada etiqueta era o private o public, en cambio en C# hay que colocarle qué nivel de privacidad va a tener a cada uno de los atributos y métodos:


public void funcion(){}
public void talcosa(){}
public int a;
private int b;
private void talotra(){}


Seguiré modificando este post para ir agregando cosas que extraño de C++, igualmente repito que son muchos más los beneficios que dá C# y que contaré en un post siguiente...


No hay comentarios:

Publicar un comentario

Escriba su comentario...