diego alejandro ríos estudiante de ingeniería...

4
Diego Alejandro Ríos Sagastume [email protected] Estudiante de Ingeniería en Ciencias y Sistemas - USAC Palabras claves: C++,C, asm ,reservadas, volátil, virtual, operator, friend, amigas 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. http://www.atmel.com/Microsite/atmel-studio/compiler-editor.aspx

Upload: others

Post on 20-Jul-2021

3 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Diego Alejandro Ríos Estudiante de Ingeniería enc4.usac.edu.gt/revindex/articulos/editor8-r334_pi6_pfi8... · 2018. 4. 26. · Diego Alejandro Ríos Sagastume dalejrios@gmail.com

Diego Alejandro Rí[email protected]

EEssttuuddiiaannttee ddee IInnggeenniieerrííaa eenn

CCiieenncciiaass yy SSiisstteemmaass -- UUSSAACC

Palabras claves:C++,C, asm ,reservadas,volátil, virtual, operator, friend,amigas

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.

http://www.atmel.com/Microsite/atmel-studio/compiler-editor.aspx

Page 2: Diego Alejandro Ríos Estudiante de Ingeniería enc4.usac.edu.gt/revindex/articulos/editor8-r334_pi6_pfi8... · 2018. 4. 26. · Diego Alejandro Ríos Sagastume dalejrios@gmail.com

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:

Es el tipo de datos que retornará el operador cuando

se utilice.

Es la palabra reservada que sobrecarga el

operador.

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.

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

ayudarán simplemente a escribir menos código.

Page 3: Diego Alejandro Ríos Estudiante de Ingeniería enc4.usac.edu.gt/revindex/articulos/editor8-r334_pi6_pfi8... · 2018. 4. 26. · Diego Alejandro Ríos Sagastume dalejrios@gmail.com

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.

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.

Universidad Politécnica de Catalunya, Barcelona.

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.

C++ nos ofrece la posibilidad de mantener una variable en

un registro del procesador, se puede hacer esto por muchas

razones pero preferiblemente para que nuestros programas

Page 4: Diego Alejandro Ríos Estudiante de Ingeniería enc4.usac.edu.gt/revindex/articulos/editor8-r334_pi6_pfi8... · 2018. 4. 26. · Diego Alejandro Ríos Sagastume dalejrios@gmail.com

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.

En el siguiente artículo describo mi experiencia con esta

gran herramienta en un ámbito profesional y de trabajo en

Daniel Alvarez Alvarez

DDaanniieell..aallvv9966@@ggmmaaiill..ccoommEstudiante de Ingeniería enCiencias y Sistemas - USAC

Palabras claves:GIT, Versionamiento, Trabajo en equipo,Versionamiento de Código, Git Flow.

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.

Mi experiencia en el campo de desarrollo de software me ha

llevado a desarrollar proyectos tan pequeños en donde un

http://todoconk.com/2016/01/20/git-en-windows/

Ensamblador Linux.

http://studies.ac.upc.edu/FIB/PROSO/index_files/Annex-

Asm.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