Diego Alejandro Ríos Sagastume dalejrios@gmail.com Estudiante de Ingeniería en Ciencias y Sistemas - USAC Palabras claves: C++,C, asm ,reservadas, volátil, virtual, operator, friend, amigas http://www.atmel.com/Microsite/atmel-studio/compiler-editor.aspx C++ posee una gran variedad de instrucciones especialmente diseñadas para ciertas tareas, los ciclos For por ejemplo son especiales para la creación de bucles en donde se conoce el número de iteraciones; los ciclos While son ideales cuando se desconoce el número de iteraciones; los Switch son la opción para cuando se posee varias comparaciones con un mismo valor, en lugar de utilizar múltiples condicionales If. Este lenguaje además posee otras instrucciones y palabras reservadas cuando se presentan ciertas situaciones, Throws para manejar errores, Asm para incluir código ensamblador y otras no tan conocidas como virtual, Volatile, etc. A lo largo del artículo veremos éstas instrucciones y algunas situaciones en las cuales nos pueden ser realmente útiles. C++ es un poderoso lenguaje de programación el cual es una evolución del lenguaje C. Cabe destacar ésta diferencia ya que generalmente se tiende a confundir éstos 2 lenguajes. El lenguaje C fue mejorado para soportar el paradigma orientado a objetos y nació C++, C++ soporta toda la programación estructurada y además la programación orientada a objetos, junto con todo lo que esto conlleva: POO, herencia tanto simple como múltiple, polimorfismo, sobrecarga, casteo, clases abstractas, interfaces, etc. C++ está en casi todos los ámbitos de nuestra vida, es difícil mostrar la cantidad de aplicaciones que tiene, acá van algunas: aplicaciones en general, creación de sistemas operativos, exploradores de archivos, programación de microchips, virtualización, etc. Cabe mencionar además que estas aplicaciones son muy veloces debido a que C++ es un lenguaje compilado, no interpretado, debido a eso genera aplicaciones nativas. Una desventaja es que dichas aplicaciones no son multiplataforma. No ahondaremos en el cómo programar en C++, ya que no es el objetivo del artículo. El objetivo principal es mostrar algunas instrucciones avanzadas que pueden ser de gran utilidad al momento de resolver ciertos problemas, así que comencemos: Primero algo de concepto, un lenguaje embebido es un código de un lenguaje escrito en otro lenguaje de programación, por ejemplo, batch escrito en java y lo que nos ofrece C++, ensamblador en código C++. Estas operaciones son realmente útiles al momento de trabajar muy cerca del procesador, lo cual nos permite tener una comunicación directa con el hardware de la máquina, pudiendo modificar los registros del procesador, invocar interrupciones, etc. Algunos compiladores permiten además utilizar variables globales o locales en el trozo de lenguaje ensamblador que se está insertando. En los apéndices se muestra un manual de ensamblador en línea y el resultado del siguiente ejemplo. Es el operador que deseamos sobrecargar, no todos los operadores son sobrecargables pero la mayoría si lo son. Los operadores que no se pueden sobrecargar son: #,##, selector de componente (.), operando de valores por defecto (:), operadores de resolución de ámbito (::), operador de puntero a miembro (.*), condicional ternario (?), sizeof y typeid. Ejemplo: Se muestra a continuación cómo hacer para que al sumar 2 objetos, se resten y cómo hacer para que al restar 2 objetos se mande a un archivo. Vea el resultado en los apéndices. Son pocas las aplicaciones de esta instrucción, pero si existen. Esto es muy utilizado al momento de programar software a bajo nivel utilizando instrucciones de alto nivel. Por ejemplo cuando necesitamos acceder a los registros del procesador desde una aplicación gráfica, o al momento de programar un sistema de archivos. Una aplicación que he visto que se utiliza es al momento de creación de sistemas operativos, en el libro de Sistemas Operativos – Diseño e Implementación diseñan un sistema operativo utilizando instrucciones tanto de alto nivel (C) como de bajo nivel (Assembler). ¿Te has preguntado si sería divertido hacer que un lenguaje en lugar de sumar, restara? o ¿en lugar de multiplicar, guarde algo en un archivo? Bueno, la palabra reservada operator nos permite realizar esto. Operator es una instrucción en lenguaje C++ que nos permite sobrecargar operadores y definirles un nuevo comportamiento dependiendo de los tipos de datos que le mandemos. Su sintaxis es la siguiente: La sobrecarga de operadores tiene la funcionalidad de hacernos la vida mucho más simple. Generalmente si deseamos realizar operaciones con objetos o Structs en C, tendríamos que hacer una función para realizar las acciones (por ejemplo una suma) y llamarla cada vez que deseamos realizar esa operación. Con los operadores sobrecargados bastará simplemente con sobrecargar el operador para esas instrucciones y esos objetos y olvidarnos del problema. La sobrecarga es realmente útil para concatenar cadenas, sumar vectores, operaciones con matrices, etc. Es una de las instrucciones con mayor aplicación que en general nos Es el tipo de datos que retornará el operador cuando ayudarán simplemente a escribir menos código. se utilice. Es la palabra reservada que sobrecarga el operador. Sabemos que los atributos declarados como privados son imposibles de acceder por las funciones que no pertenecen a la clase en donde se declaran; pero existe un tipo de funciones llamadas funciones amigas las cuales pueden acceder a estos atributos. Estas funciones son realmente útiles al momento de crear estructuras de datos y en otras situaciones en las que es necesario acceder a atributos privados pero manteniendo uno de los principios de la POO, el encapsulamiento. Se declaran como prototipos de funciones en las clases y fuera de la clase se define su comportamiento, como se muestra en el siguiente ejemplo (Véase el resultado en los apéndices). sean más veloces. Debemos saber que sin importar la arquitectura del procesador en el que estemos, tenemos un número limitado de registros, por lo que si el procesador ya no tiene más registros, el compilador simplemente ignorará la instrucción. No es fácil saber en qué registro coloca la variable el compilador, se necesita un depurador y un desensamblador para saber esto, lo cual no puede mostrarse fácilmente en un artículo. Para finalidad de este artículo, nos limitaremos a mostrar la instrucción y el lector sabrá que esto existe para su utilización. Esto solamente se puede aplicar a variables y su sintaxis es: Este tipo de variables es muy útil en los ciclos de los programas o en las instrucciones repetitivas ya que podemos mantener la variable iteradora en un registro con lo cual se vuelve mucho más rápido ya que no tiene que ir a la memoria RAM para ver su valor. También en variables acumuladoras o sumas es relativamente útil porque aumenta la velocidad de procesamiento. C++ nos ofrece varias instrucciones, muchas de ellas desconocidas para la mayoría de desarrollares, con las que podemos crear potentes programas. Así como la sobrecarga nos ayuda a escribir menos código, las funciones amigas nos ayudan a tener un código más legible y sencillo de entender. A medida que el código de nuestras clases va creciendo es mucho más complicado entenderlo y manejarlo. Con las funciones amigas podemos escribir una línea de código indicando esa función como amiga y en otro archivo ir colocando la definición completa de la función, esto nos ayudará a tener un código más legible, dándonos la posibilidad de crear varios archivos dependiendo de la versión del software, ya que es solo de ir agregando más archivos en donde definimos las funciones. Es posible incluir código ensamblador en programas C++ con el ensamblador en línea, pero la sintaxis del lenguaje ensamblador varía dependiendo del compilador utilizado. Existe una forma de acceder a los atributos privados de una clase, esto es con las funciones amigas. Operator es una de las instrucciones más potentes de C++, pudiendo tener infinidad de aplicaciones. El uso de instrucciones avanzadas como el ensamblador en línea es muy útil pero se debe tener cuidado ya que puede generar la desestabilización del sistema. C++ nos ofrece la posibilidad de mantener una variable en un registro del procesador, se puede hacer esto por muchas Universidad Politécnica de Catalunya, Barcelona. razones pero preferiblemente para que nuestros programas Ensamblador Linux. http://studies.ac.upc.edu/FIB/PROSO/index_files/AnnexAsm.pdf Fco. Javier Ceballos. Programación Orientada a Objetos con C++. Tercera Edición. Alfaomega Ra-Ma Editorial, Madrid, España. 2004. Barry B. Brey. Microprocesadores Intel, Arquitectura, Programación e Interfaz. Séptima Edición. Pearson Education, México. 2006. https://plus.google.com/communities/105337365133598564957/stream /3d866784-5ed1-483f-93a4-fb5cb234d9ae http://todoconk.com/2016/01/20/git-en-windows/ Daniel Alvarez Alvarez Daniel.alv96@gmail.com Estudiante de Ingeniería en Ciencias y Sistemas - USAC Palabras claves: GIT, Versionamiento, Trabajo en equipo, Versionamiento de Código, Git Flow. Git es la herramienta de software de control de versiones diseñado por Linus Torvalds, pensando en la eficiencia y la confiabilidad del mantenimiento de versiones de aplicaciones cuando éstas tienen un gran número de archivos de código fuente. Git sustituyó a subversión, el cual también es una herramienta de control de versiones de código, por sus características adicionales y que es más fácil de utilizar. equipo, puedo describir mi experiencia ya que a través de mi experiencia laboral he trabajado en un ambiente de trabajo sin control de versiones, en ambiente laborales con la herramienta Subversión y con la herramienta de Git. Ya que Git empezó a utilizarse como una herramienta indispensable para equipos de desarrollo se han escrito estándares para llevar un mejor control de cómo crear branches y en que categoría debe llevarse cada branch a estos estándares se les ha nombrado “Git Flow”. También, como Git está diseñado para trabajos en equipo, nos ha permitido trabajar con personas que inclusive no están presentes en la misma oficina pero gracias a su gran control de versiones el desarrollo no se ve afectado, para lograr esta característica se debe trabajar con plataformas que alojan nuestro proyecto como lo es GitHub. En el siguiente artículo describo mi experiencia con esta Mi experiencia en el campo de desarrollo de software me ha gran herramienta en un ámbito profesional y de trabajo en llevado a desarrollar proyectos tan pequeños en donde un