Inserción de documentos PDF en LaTeX

Objetivo: aprender a insertar documentos PDF en nuestros ficheros creados en \LaTeX.

Con frecuencia puede resultarnos conveniente la posibilidad de insertar otros ficheros externos en la estructura de un documento que creemos empleando \LaTeX. El formato de salida más frecuéntemente elegido a la hora de compilar un fichero .tex es PDF, de modo que parece natural que \LaTeX pueda trabajar sin excesiva dificultad con otros ficheros creados en ese formato.

Para poder agregar otros archivos PDF a nuestro documento necesitamos hacer uso del paquete pdfpages:

\usepackage{pdfpages}

Esa es la magia de \LaTeX que una y otra vez me fascina: su capacidad para realizar tareas sorprendentes ampliando su funcionalidad mediante el uso de paquetes.

Los PDF que insertemos no tienen que ser necesariamente generados en \LaTeX; todos sirven.

En el punto del documento en el que deseemos que se realice la inserción utilizamos el comando:

\includepdf[pages=inicial-final]{nombre_del_documento}

Si el punto de inserción está en mitad de una página, \LaTeX forzará un salto de página llegado ese punto para que el PDF se agregue al comienzo de una nueva.

Observa que el primer parámetro es opcional (escrito entre corchetes). Si lo omites sólo se agregará la primera página del PDF.

El rango de páginas se indica mediante dos cifras separadas por un guión.

Por ejemplo:

[pages=3-7] Agrega sólo las páginas comprendidas entre la 3 y 7, ambas incluidas.

Si no especificamos un valor inicial \LaTeX asumirá que quieres insertar desde el principio:

[pages=-10] Agrega desde el comienzo hasta la página 10.

Del mismo modo, si no indicamos un valor final sobreentederá que es hasta el final del documento:

[pages=5-] Agrega desde la página 5 hasta la última.

Si queremos que se inserte el documento completo, omitimos los valores inicial y final, pero aún así debemos incluir el guión:

[pages=-] Agrega el documento completo, de principio a fin.

El parámetro obligatorio, el nombre del fichero, se indica entre llaves. Puedes omitir, si lo deseas, la extensión, pues se da por supuesto que estamos lidiando con PDFs.

Eso sí, si el PDF no está en el mismo directorio que el .tex asegúrate de incluir también la ruta (absoluta o relativa). Presta mucha atención y, aunque estés trabajando en una máquina Windows, usa como separador de directorio la barra al estilo Unix, /, y no \, pues esta última es un símbolo reservado de \LaTeX (el indicador de comando).

Veamos algunos ejemplos:

\includepdf{comparativa}

Agrega la primera página del fichero comparativa.pdf.

\includepdf[pages=25-27]{comparativa}

Inserta las páginas 25, 26 y 27 del fichero comparativa.pdf.

\includepdf[pages=-]{running/clasificacion}

Inserta la totalidad del documento clasificacion.pdf, almacenado en el directorio running, presente en la misma carpeta que el fichero .tex.

He esbozado aquí un uso básico de pdfpages, aunque, por lo general, suficiente en la mayor parte de las ocasiones. No obstante, hay muchas más cosas que el paquete puede hacer y te invito a consultar su documentación si deseas conocerlas.

Incluye pdfpages en tu kit de recursos. Disfruta de su potencia y eleva a un nuevo nivel la calidad de los documentos que generes en \LaTeX.

Javier Montero Gabarró


Inserción de documentos PDF en LaTeX


El texto de este artículo se encuentra sometido a una licencia Creative Commons del tipo CC-BY-NC-ND (reconocimiento, no comercial, sin obra derivada, 3.0 unported)


El Club del Autodidacta


Índice completo de artículos relacionados con \LaTeX.

Java: El concepto de objeto

lasecreObjetivo: comprender el concepto de Objeto, diferenciándolo del de Clase y presentar la notación punto.

Una vez hemos entendido el concepto de Clase en el paradigma de la Programación Orientada a Objetos, es momento de matizar que es un Objeto en su sentido más práctico.

Una Clase, como hemos visto, no es más que una especificación que define las características y el comportamiento de un determinado tipo de objetos. Piensa en ella como si se tratara de una plantilla, molde o esquema a partir del cual podremos construir objetos concretos.

Consideremos la clase Coche que definimos en el artículo anterior:

class Coche
{
  String marca;
  String modelo;
  String color;
  int numeroDePuertas;
  int cuentaKilometros;
  int velocidad;
  boolean arrancado;
  
  void arrancar()
  {
    arrancado = true;
  }
  
  void parar()
  {
    arrancado = false;
  }
  
  void acelerar()
  {
    velocidad = velocidad + 1;
  }
  
  void frenar()
  {
    velocidad = velocidad - 1;
  }
  
  void pitar()
  {
    System.out.println("Piiiiiiiiiiiiiiiiii");
  }

  int consultarCuentaKilometros()
  {
    return cuentaKilometros;
  }
}

Con este esquema en nuestras manos, vamos a crear coches concretos de la marca, modelo y color que nos apetezca. Cada uno que creemos será un objeto, o instancia, de la clase Coche. Fíjate, en esta terminología, en la equivalencia de los términos objeto e instancia para referirnos, ahora sí, a entidades concretas de una determinada clase.

Fabriquemos, entonces, nuestro primer coche…

Cada objeto, como todas las variables en Java, ha de ser declarado antes de ser utilizado:

Coche coche1;

Con esta instrucción declaramos la variable coche1 de tipo Coche. En cuanto creemos, con el comando que escribiremos a continuación, el objeto concreto, coche1 contendrá una referencia a ese objeto, es decir, almacenará la dirección de memoria en la que realmente se halla el objeto propiamente dicho. Esto es muy importante: coche1 no contendrá el objeto en sí, sino una dirección de memoria que apunta a él.

Materialicemos nuestro primer coche del siguiente modo:

coche1 = new Coche();

La palabra reservada new se emplea para crear nuevos objetos, instancias de una determinada clase que indicamos a continuación seguida de un par de paréntesis.

Veremos esto a su debido momento, pero por ahora debe bastarte retener que se está invocando a un método especial que tienen todas las clases que sirve para construir el objeto en cuestión facilitándole sus valores iniciales. A este método se le conoce como constructor de la clase.

Podríamos habernos ocupado de la declaración y la creación en una sola instrucción:

Coche coche1 = new Coche();

Otro trasto más contaminando nuestras ciudades. Hagamos, al menos, que no consuma mucho:

coche1.marca = "Seat";
coche1.modelo = "Panda";

Consulta el cuadro de arriba con la definición de la clase y observa que tanto marca como modelo son dos atributos de tipo String, por lo que referencian cadenas de caracteres que escribimos entre comillas.

Observa con cuidado la notación punto. Separamos el nombre de la variable que referencia al objeto del atributo empleando un punto como separador.

Pintemos de azul nuestro flamante vehículo:

coche1.color = "Azul";

Además tiene tres puertas, el cuenta kilómetros indica 250.000 Km (bueno, algo viejo parece que es) y su velocímetro refleja 0 Km/h. Valores correspondientes a los atributos numeroDePuertas, cuentaKilometros y velocidad, respectivamente, todos de tipo entero.

coche1.numeroDePuertas = 3;
coche1.cuentaKilometros = 250000;
coche1.velocidad = 0;

Su motor está detenido, hecho que representamos a través de la variable booleana arrancado:

coche1.arrancado = false;

Cuando nos cansemos de enredar con los atributos podemos jugar con los métodos. Arranquemos el Panda:

coche1.arrancar();

De nuevo, empleamos también la notación punto para separar la variable del método.

Si observas el código verás que este método se limita a hacer que la variable booleana arrancado valga ahora true. Podrías decir que hubiéramos logrado el mismo resultado actuando sobre el atributo directamente, en lugar de invocar al método:

coche1.arrancado = true;

En efecto, es así; pero, como comprenderás más adelante, no suele ser buena idea dejar que los programas campen a sus anchas y modifiquen arbitrariamente los atributos de un objeto, siendo preferible que sean los métodos los que se ocupen de esa labor. Imagina que el programa intenta hacer que el cuenta kilómetros marque una cantidad negativa, o que el número de puertas sea igual a cincuenta. Un método correctamente diseñado podría gestionar que los valores estuvieran dentro del rango adecuado y asegurarse de que se cumplen las condiciones que permitirían la modificación del atributo.

La Programación Orientada a Objetos implementa un mecanismo, denominado encapsulación, que nos permite ocultar determinadas facetas de nuestro objeto y dejar sólo accesibles aquellas partes que nos interesen. Pero vayamos por orden, todo a su momento…

Sigamos jugando con nuestro viejo cacharro azul:

coche1.acelerar();

Lo que provocará, si consultas el código, que el velocímetro incremente en una unidad su valor.

coche1.pitar();

Lo que ocasionará un estridente pitido.

Puedes crear todos los objetos de la clase Coche que desees:

Coche coche2 = new Coche();

Cada uno con su propia colección de atributos:

coche2.marca = "Ford";
coche2.modelo = "Fiesta";
coche2.color = "Negro";

Incluso podrías crear otros Seat Pandas, por supuesto. Aunque, en un instante dado, compartieran los mismos valores en sus atributos, se trataría de objetos distintos, ubicados en direcciones de memoria diferentes y cada uno podría seguir su propia trayectoria vital.

En el próximo artículo aprenderemos a crear un programa que nos permita probar nuestra clase Coche y en el que veremos en acción las líneas de código que hoy hemos esbozado.

Javier Montero Gabarró


Java: El concepto de objeto


El texto de este artículo se encuentra sometido a una licencia Creative Commons del tipo CC-BY-NC-ND (reconocimiento, no comercial, sin obra derivada, 3.0 unported)


El Club del Autodidacta


Índice completo de artículos sobre Java.

Armonización de la escala mayor – 4

Objetivo: observar que el tipo de acorde que se obtiene al armonizar la escala mayor depende del grado concreto y no de la tonalidad.

En el anterior artículo descubrimos los acordes que aparecían al armonizar la escala de Do mayor:

C – Dm – Em – F – G – Am – B°

Esto es, obtenemos acordes mayores en los grados primero, cuarto y quinto, menores en el segundo, tercero y sexto y disminuido en el séptimo grado.

Voy a plantearte una cuestión que probablemente podrás responder ya. Imagínate que realizamos la misma operación sobre otra escala mayor diferente a Do mayor como, por ejemplo, La mayor. ¿De qué tipo crees que serán los acordes que nos aparecerán?

Todas las escalas mayores comparten una característica común, que es su estructura interválica. Recuerda su fórmula:

T – T – S – T – T – T – S

La distancia que cada grado mantiene respecto al primero (denominado tónica), comparando entre otras escalas mayores, es siempre la misma, tanto si se trata de Do mayor, La mayor o Mi bemol mayor. Es de esperar, por lo tanto, que los acordes que obtengamos al armonizar sean de la misma especie también.

Calculemos los acordes que se derivan de la escala La mayor aplicando la metodología que empleamos para Do mayor.

Si aplicamos la fórmula interválica de la escala mayor partiendo de la nota La (A), obtenemos:

La mayor: A – B – C# – D – E – F# – G# – A

Si armonizamos por terceras nos aparecen los siguientes acordes de tres notas (tríadas):

A –> A – C# – E –> tercera mayor + tercera menor –> A

B –> B – D – F# –> tercera menor + tercera mayor –> Bm

C# –> C# – E – G# –> tercera menor + tercera mayor –> C#m

D –> D – F# – A –> tercera mayor + tercera menor –> D

E –> E – G# – B –> tercera mayor + tercera menor –> E

F# –> F# – A – C# –> tercera menor + tercera mayor –> F#m

G# –> G# – B – D –> tercera menor + tercera menor –> G#°

Comparemos esta nueva familia de acordes con la que obtuvimos de Do mayor:

Do mayor: C – Dm – Em – F – G – Am – B°

La mayor: A – Bm – C#m – D – E – F#m – G#°

Como puedes ver, pese a ser, naturalmente, diferentes, mantienen el tipo, como campeones, grado a grado: mayores sobre el primero, cuarto y quinto, menores sobre el segundo, tercero y sexto, y disminuido sobre el séptimo.

Esta importante conclusión podemos reflejarla así, indicando cada grado por números romanos:

I – IIm – IIIm – IV – V – VIm – VII°

Memorízala bien, pues te ayudará a manejarte con soltura cuando tengas que lidiar con tonalidades distintas.

En muchas publicaciones esta misma relación aparece escrita del siguiente modo:

I – ii – iii – IV – V – vi – vii°

Conviene que te familiarices también con ella.

La diferencia estriba en que los acordes menores los indicamos directamente con el grado escrito en minúsculas, sin necesidad de recurrir al sufijo m. El acorde sobre el séptimo grado también está en minúsculas, pese a que no sea estrictamente menor, pues la distancia entre su fundamental y tercera es una tercera menor, intervalo característico de todos los acordes menores.

Todo lo escrito hasta ahora en esta serie no tenía otra misión sino llegar a la conclusión fundamental que acabamos de deducir, herramienta imprescindible para todo compositor o arreglista. En el próximo artículo realizaremos algunos ejercicios prácticos que ilustrarán su aplicación.

Javier Montero Gabarró


http://elclubdelautodidacta.es/wp/2013/05/armonizacion-de-la-escala-mayor-4/


El texto de este artículo se encuentra sometido a una licencia Creative Commons del tipo CC-BY-NC-ND (reconocimiento, no comercial, sin obra derivada, 3.0 unported)


El Club del Autodidacta


Índice de todos los artículos de armonía.

Python – Listas por comprensión – 2

Objetivo: presentar la sintaxis extendida de la generación de listas por comprensión en Python.

En el artículo anterior mostramos la elegancia de Python en la forma de las listas por comprensión, mecanismo que nos permitía, con una única instrucción, generar una lista a través de la transformación de los elementos de un iterable.

Vamos a dar un pase adelante y refinemos la creación de esa lista mediante la introducción de un filtro selectivo.

Dado el siguiente listado de alumnos de una clase:

>>> alumnos = ['Ana', 'Luis', 'Pedro', 'Marta', 'Nerea', 'Pablo']

Supongamos que queremos obtener las iniciales de todas las chicas del grupo.

Obtener simplemente las iniciales no debería plantearte mucho problema con las técnicas que ya conoces:

>>> [alumno[0] for alumno in alumnos]
['A', 'L', 'P', 'M', 'N', 'P']

Recorremos la lista alumnos de alumno en alumno y nos quedamos con la primera letra de cada uno (alumno[0]).

Pero, ¿podemos realizar el filtrado de sexo manteniendo la elegancia de las listas por comprensión?

Es preciso recurrir a la sintaxis extendida:

– Comenzamos recorriendo el iterable.

– Escribimos a la izquierda la transformación deseada.

– Escribimos a la derecha la condición de filtrado.

– Encerramos todo el conjunto entre corchetes.

He aquí la solución buscada:

>>> [alumno[0] for alumno in alumnos if alumno[-1] == 'a']
['A', 'M', 'N']

Observa que alumno[-1] representa a la última letra de cada nombre. Naturalmente, nos hemos permitido simplificar el problema presuponiendo que los nombres de mujer son aquellos que terminan en a.

Recuerda que las listas por comprensión no modifican la lista original sino que crean otra nueva.

El primer término no tiene que implicar necesariamente una transformación. Por ejemplo, si en vez de la inicial queremos el nombre completo, podríamos haber procedido así, obviamente:

>>> [alumno for alumno in alumnos if alumno[-1] == 'a']
['Ana', 'Marta', 'Nerea']

Vamos a complicarlo algo más. El siguiente diccionario contiene las calificaciones de esos alumnos:

>>> notas = {'Ana':9, 'Luis':7, 'Pedro':2, 'Marta':5, 'Nerea':4, 'Pablo':6}

Debemos obtener los nombres de todos aquellos que hayan aprobado:

Desglosemos la lista por comprensión en sus tres términos. Comenzamos por el central, correspondiente a la iteración:

for nombre, nota in notas.items()

Fíjate en el uso del método items() para poder iterar simultáneamente sobre las claves y los valores del diccionario.

En el primer término indicamos lo que queremos extraer:

nombre

Y en el tercero realizamos el filtrado:

if nota >= 5

Todo junto, entre corchetes, nos devuelve la lista buscada:

>>> [nombre for nombre, nota in notas.items() if nota >= 5]
['Ana', 'Luis', 'Pablo', 'Marta']

No te costará mucho habituarte a las listas por comprensión. Código limpio y eficiente, ¡Python es esto, quién podría resistirse?

Javier Montero Gabarró


Python – Listas por comprensión – 2


El texto de este artículo se encuentra sometido a una licencia Creative Commons del tipo CC-BY-NC-ND (reconocimiento, no comercial, sin obra derivada, 3.0 unported)


El Club del Autodidacta


Consulta el índice completo de artículos relacionados con Python.

Armonización de la escala mayor – 3

Objetivo: nombrar los acordes tríadas resultado de armonizar por terceras la escala de Do mayor.

En la segunda entrega de la serie aprendimos a deducir los acordes de tres notas (tríadas) que se obtenían al apilar terceras sobre las notas de la escala de Do mayor. En el artículo de hoy nos ocuparemos de ponerles nombre.

Recuperemos, en primer lugar, la tabla que obtuvimos al armonizar Do mayor:

DO: DO – MI – SOL (C – E – G)

RE: RE – FA – LA (D – F – A)

MI: MI – SOL – SI (E – G – B)

FA: FA – LA – DO (F – A – C)

SOL: SOL – SI – RE (G – B – D)

LA: LA – DO – MI (A – C – E)

SI: SI – RE – FA (B – D – F)

Pese a que todos los acordes los hemos obtenido apilando terceras, no todos mantienen la misma distancia entre sus notas (intervalos).

Observa, por ejemplo, el primero, construido sobre la nota DO:

DO – MI – SOL

Entre DO y MI, ¿cuántos semitonos hay? Contemos:

DO#, RE, RE#, MI; 4 semitonos (a la hora de contar semitonos NO incluimos la nota inicial).

Una tercera con una distancia de 4 semitonos se denomina tercera mayor.

Toma ahora el siguiente intervalo de tercera del mismo acorde. Veamos qué distancia hay entre MI y SOL.

FA, FA#, SOL; 3 semitonos

A este tipo de tercera, con una distancia de 3 semitonos, se la conoce como tercera menor.

Podemos concluir, por lo tanto, que el acorde DO – MI – SOL es el resultado de superponer sobre la nota DO una tercera mayor seguida de otra menor.

Analicemos el siguiente acorde de la lista y comprobemos que la situación es la opuesta:

RE – FA – LA

¿Qué distancia hay entre RE y FA?

RE#, MI, FA; 3 semitonos. Entre RE y FA hay una tercera menor.

¿Y entre FA y LA?

FA#, SOL, SOL#, LA; 4 semitonos. Entre FA y LA hay una tercera mayor.

De modo que el acorde RE – FA – LA se obtiene de superponer, sobre la nota RE, una tercera menor seguida de otra mayor.

Justo lo contrario de lo que ocurría en el primer acorde. Es precisamente esa diferencia la que determina el nombre del acorde.

A la hora de apilar terceras nos pueden suceder los siguientes casos:

tercera mayor + tercera menor = acorde mayor
tercera menor + tercera mayor = acorde menor
tercera menor + tercera menor = acorde disminuido
tercera mayor + tercera mayor = acorde aumentado

Naturalmente, cuando usamos la palabra acorde, nos estamos refiriendo al acorde tríada, compuesto de tres notas. Más adelante realizaremos el estudio para las tétradas o cuatríadas.

Con este sencillo esquema podemos ya nombrar cada acorde:

DO: DO – MI – SOL; tercera mayor + tercera menor

Por lo tanto, se trata del acorde Do mayor, que en cifrado moderno se representa por C (la nota fundamental del acorde sin ningún calificativo más).

RE: RE – FA – LA; tercera menor + tercera mayor

Estamos ante RE menor, representado por Dm (la fundamental D, seguida del calificativo m o min).

MI: MI – SOL – SI

Distancia entre MI y SOL, 3 semitonos; distancia entre SOL y SI, cuatro semitonos.

Tercera menor + tercera mayor; acorde menor. Mi menor, Em

FA: FA – LA – DO

Distancia entre FA y LA, 4 semitonos. Entre LA y DO, 3 semitonos.

Tercera mayor + tercera menor; acorde mayor: F

SOL: SOL – SI – RE

Distancia entre SOL y SI, 4 semitonos. Entre SI y RE, 3 semitonos. Acorde mayor, nuevamente: G

LA: LA – DO – MI

Distancia entre LA y DO, 3 semitonos. Entre DO y MI, 4 semitonos. Acorde menor, Am

SI: SI – RE – FA

Distancia entre SI y RE, 3 semitonos. Entre RE y FA, 3 semitonos también.

Tercera menor + tercera menor; acorde disminuido: B dim, o bien,

Ya tenemos nuestra flamante colección de tríadas resultado de armonizar por terceras la escala de Do mayor:

C – Dm – Em – F – G – Am – Bº

Estos son nuestros siete acordes diatónicos buscados. La gran, gran mayoría de las canciones escritas en Do mayor contienen exclusivamente estos acordes. Y si hay alguno ajeno a esta relación suele ser en pinceladas controladas que aportan un toque peculiar a la composición. Date cuenta de que cualquier otro acorde tríada que no sea uno de estos siete contendrá, al menos, una nota no diatónica, es decir, una nota que no pertenecerá a la escala de Do mayor.

En la siguiente entrega analizaremos otra tonalidad cualquiera y generalizaremos las conclusiones.

Javier Montero Gabarró


http://elclubdelautodidacta.es/wp/2013/04/armonizacion-de-la-escala-mayor-3/


El texto de este artículo se encuentra sometido a una licencia Creative Commons del tipo CC-BY-NC-ND (reconocimiento, no comercial, sin obra derivada, 3.0 unported)


El Club del Autodidacta


Índice de todos los artículos de armonía.

Ajedrez y LaTeX: Anotación de una partida

Objetivo: utilización del paquete skak para anotar una partida de ajedrez en LaTeX.

En el anterior artículo de esta serie introdujimos el paquete skak como herramienta para la generación de textos relacionados con el ajedrez en LaTeX y aprendimos a dibujar un sencillo tablero y a colocar las piezas sobre él en su posición original. Hoy moveremos pieza y realizaremos la transcripción de una partida completa.

He elegido como ejemplo un clásico que, sin duda, todo ajedrecista conocerá y que para mí tiene un significado especial, pues es la primera partida que tengo conciencia de haber reproducido de un libro que teníamos en mi casa cuando yo era muy pequeño. El primero de una colección de más de un centenar de libros de ajedrez que le seguirían después.

Lamentablemente, en algún momento debí de perderle el rastro. No sé si se quedó en casa de mis padres o lo cogió mi hermano tras el reparto de libros que hicimos cuando, con nuestras oposiciones recién aprobadas, tuvimos que abandonar el hogar y separarnos más de mil kilómetros el uno del otro para ganarnos la vida.

Pero recuerdo que aquel libro me ayudó a dar mis primeros pasos ajedrecísticos. Con él aprendí a realizar los mates sencillos, las aperturas básicas… Entre la colección de partidas de ejemplo figuraba una especialmente bella y que quedó marcada para siempre en mi memoria.

Me refiero a la mítica partida celebrada en 1858 en París, durante una representación de «El barbero de Sevilla», entre Paul Morphy y dos aficionados locales en consulta, el Dunque de Brunswick y el Conde Isouard.

El paquete skak nos ofrece el comando \mainline para la introducción de la línea principal de la partida. Su nombre nos sugiere la existencia de otro comando específico para la introducción de variantes del que nos ocuparemos próximamente.

Facilitamos, entre llaves, las jugadas de la partida escritas en notación algebraica corta (el libro, naturalmente, empleaba la notación descriptiva; tardamos muchos años en hacer obligatorio en España el sistema algebraico en las competiciones).

Es importante tener en cuenta que las piezas deben ser indicadas en terminología inglesa. Esto es:

K – Rey (King)
Q – Dama (Queen)
R – Torre (Rook)
N – Caballo (Knight)
B – Alfil (Bishop)

Más adelante veremos cómo personalizar la entrada para nuestro idioma.

Por la salida no debemos preocuparnos, pues skak adopta la representación universal basada en figurines popularizada por el Informator.

Que comience el espectáculo:

\mainline{1. e4 e5 2. Nf3 d6}

Asegúrate de que tras el número de cada jugada haya siempre un punto (aunque luego no aparecerá en la salida), de lo contrario no te compilará el código.

Cierra las llaves en el momento que quieras para introducir comentarios o para representar un diagrama con la posición actual empleando \showboard.

\newgame
\mainline{1. e4 e5 2.  Nf3 d6} 

\showboard

La  Defensa Philidor, muy popular en la época.

morphy

Este es el código completo, incluido el preámbulo, de la transcripción de la partida. Observa como, tras cada interrupción, continuamos la línea principal con sucesivos comandos \mainline.

\documentclass{article}
\usepackage[spanish]{babel}
\usepackage[utf8]{inputenc}
\usepackage{parskip}
\usepackage{skak}  

\begin{document}

\textbf{Blancas:} Morphy

\textbf{Negras:} Duque de Brunswick y Conde Isouard

\textit{Paris, 1858}

\newgame
\mainline{1. e4 e5 2. Nf3 d6} 

\showboard

La  Defensa Philidor, muy popular en la época.

\mainline{3. d4 Bg4 4.dxe5 Bxf3 5.Qxf3 dxe5 6.Bc4 Nf6 7.Qb3 Qe7 8.Nc3 c6 9.Bg5 b5}

\showboard

\mainline{10.Nxb5 cxb5 11.Bxb5+ Nbd7 12. O-O-O}

\showboard

\mainline{12... Rd8 13. Rxd7  Rxd7 14. Rd1 Qe6 15. Bxd7+ Nxd7 16. Qb8+ Nxb8 17. Rd8#}

\showboard

Un elegante remate.

\end{document}

Presta atención a cómo hemos continuado la partida tras la jugada 12 del blanco. Observa también el uso de la O mayúscula en vez del cero para el enroque, así como el símbolo # para el jaque mate.

morphy-2

morphy-3

Partidas como esta pueden causar profunda impresión en quien empieza a interesarse por el ajedrez. Poco después llegarían la «Siempreviva» y la «Inmortal», ambas producto del genio combinativo de Anderssen. Una ventana a un mundo mágico se descubría ante mí.

Javier Montero Gabarró


Ajedrez y LaTeX: Anotación de una partida


El texto de este artículo se encuentra sometido a una licencia Creative Commons del tipo CC-BY-NC-ND (reconocimiento, no comercial, sin obra derivada, 3.0 unported)


El Club del Autodidacta


Índice completo de artículos relacionados con \LaTeX.

Armonización de la escala mayor – 2

Objetivo: armonizar la escala de Do mayor y deducir las tríadas diatónicas que se generan.

En el primer artículo de esta serie concluímos que nuestra primera opción a la hora de armonizar una melodía escrita en una tonalidad mayor era emplear acordes diatónicos, es decir, con notas pertenecientes a la propia tonalidad.

Dijimos que la gran mayoría de las composiciones estaban basadas en progresiones de acordes diatónicos, que ocasionalmente se complementaban con otros ajenos que contribuían a darle un carácter peculiar a la creación.

Vamos a descubrir ahora qué acordes son esos, comenzando, en primer lugar, por las estructuras más simples: los acordes de tres notas, las tríadas. Una vez entendidas estas ampliaremos el estudio a los acordes de cuatro notas (cuatríadas o tétradas).

Por sencillez, comenzaremos armonizando la escala diatónica por excelencia, Do mayor. Sus notas se hallan en las teclas blancas de un piano, de modo que no tiene alteraciones (los bemoles o sostenidos que representan las teclas negras). Como veremos, las conclusiones a las que lleguemos armonizando esta escala serán perfectamente aplicables a otras tonalidades mayores.

Tomemos nuestra escala de Do mayor, la secuencia universal

DO – RE – MI – FA – SOL – LA – SI – DO

y construyamos acordes (armonicemos) sobre cada una de esas notas.

La forma más común de armonizar una escala consiste en superponer terceras diatónicas. Existen otros modos más exóticos de hacerlo, pero son mucho menos habituales y no hablaremos de ellos en esta serie.

Superponer terceras no significa otra cosa que ir añadiendo notas que estén a una distancia sucesiva de una tercera una de otra.

[Si no tienes claro el concepto de tercera te sugiero que leas la serie de siete artículos dedicados al cálculo de intervalos, exhaustiva y con numerosos ejemplos prácticos. No obstante, procuraré referir aquí los puntos más esenciales, de modo que puedas seguir avanzando en la lectura aunque no dispongas de esos fundamentos básicos.]

Comencemos por la primera nota de la escala, DO, la tónica.

Para contar una tercera diatónica, contamos secuencialmente tres notas, incluyendo la inicial, y usando sólo notas de esa escala (de ahí la denominación diatónica): DO (1), RE(2), MI(3). La nota buscada es MI.

Agreguemos ahora una nueva tercera a partir de MI: MI(1) – FA(2) – SOL(3); es decir, SOL.

De modo que sobre la primera nota, DO, hemos construido nuestro primer acorde:

DO – MI – SOL

Aunque te anticipo que este acorde se denomina Do mayor, prefiero demorar la nomenclatura hasta que hayamos desglosado la composición de los restantes.

Realicemos la misma operación en las demás notas de la escala. La siguiente tabla resume el cálculo (las notas escritas en mayúsculas resaltan las terceras):

DO: DO – re – MI – fa – SOL —> DO – MI – SOL (C – E – G, en notación anglosajona)

RE: RE – mi – FA – sol – LA —> RE – FA – LA (D – F – A)

MI: MI – fa – SOL – la – SI —> MI – SOL – SI (E – G – B)

FA: FA – sol – LA – si – DO —> FA – LA – DO (F – A – C)

SOL: SOL – la – SI – do – RE —> SOL – SI – RE (G – B – D)

LA: LA – si – DO – re – MI —> LA – DO – MI (A – C – E)

SI: SI – do – RE – mi – FA —> SI – RE – FA (B – D – F)

Asegúrate de que entiendes perfectamente el proceso realizado. Te propongo, como ejercicio, que realices estos mismos cálculos en otras tonalidades. Por ejemplo, toma Fa mayor (F – G – A – Bb – C – D – E – F) y deduce qué notas constituyen los acordes tríadas que aparecen al armonizar.

La siguiente imagen muestra gráficamente la armonización de Do mayor en un pentagrama. Es útil, aunque no conozcas nada de solfeo, visualizar espacialmente esta apilación de notas.

armonizacion-escala-mayor-1

Ya tenemos la composición de cada acorde; ahora tan sólo nos falta nombrarlos adecuadamente. ¿De qué tipo son? ¿Cuáles son mayores y cuáles menores? En breve estaremos en condiciones de responder a estas preguntas.

Javier Montero Gabarró


Armonización de la escala mayor – 2


El texto de este artículo se encuentra sometido a una licencia Creative Commons del tipo CC-BY-NC-ND (reconocimiento, no comercial, sin obra derivada, 3.0 unported)


El Club del Autodidacta


Índice de todos los artículos de armonía.

Python – Listas por comprensión – 1

Objetivo: introducir formalmente una técnica poderosa para la creación y modificación de listas: las listas por comprensión.

En un artículo reciente presentamos varios modos de abordar la necesidad de modificar una lista iterando sobre ella.

Échale un vistazo para situarte en contexto si no lo recuerdas; te llevará apenas un minuto.

Tras presentar las técnicas de modificación con la creación de una nueva lista temporal y mediante el acceso a través del índice, soltamos, a modo de aperitivo, un bombazo en perfecto estilo pythonesco:

>>> lista = [1, 2, 3, 4, 5]
>>> lista = [elemento * elemento for elemento in lista]
>>> lista
[1, 4, 9, 16, 25]

Nos ha bastado una única instrucción para transformar la lista por otra con sus elementos elevados al cuadrado.

Las listas por comprensión no sólo suponen un modo más elegante y rápido de escribir código, sino que además se ejecutan más rápidamente también, al estar implementadas directamente en lenguaje C.

Supongamos que tenemos una lista compuesta de cadenas de caracteres que queremos transformar en mayúsculas:

>>> alioli = ['ajo', 'aceite']

Para generar la lista por comprensión procedemos del siguiente modo:

1) Escribimos una iteración que recorra la lista:

for s in alioli

2) Agregamos a la izquierda lo que queremos que suceda con cada elemento:

s.upper() for s in alioli

3) Finalmente, rodeamos toda la expresión entre corchetes:

[s.upper() for s in alioli]

Observémoslo en acción:

>>> [s.upper() for s in alioli]
['AJO', 'ACEITE']

Es muy importante comprender que este procedimiento no modifica la lista original, que mantiene su valor.

>>> alioli
['ajo', 'aceite']

Se ha creado, por el contrario, un nuevo objeto lista que podría ser referenciado por cualquier otra variable.

Por supuesto, si lo que deseábamos era transformar la lista original podríamos haber hecho directamente la siguiente asignación:

>>> alioli = [s.upper() for s in alioli]

Ahora sí: alioli está referenciando la nueva lista por comprensión generada en lugar de la antigua:

>>> alioli
['AJO', 'ACEITE']

Una señora salsa en mayúsculas…

La iteración podemos realizarla sobre cualquier estructura susceptible de ser iterada, no necesariamente sobre una lista.

El siguiente ejemplo toma una cadena de caracteres y construye una lista con el código de cada carácter individual de la cadena:

>>> s = 'Me tomaría ahora una buena ración de papas al alioli'
>>> codigos = [ord(caracter) for caracter in s]
>>> codigos
[77, 101, 32, 116, 111, 109, 97, 114, 237, 97, 32, 97, 104, 111, 
114, 97, 32, 117, 110, 97, 32, 98, 117, 101, 110, 97, 32, 114, 
97, 99, 105, 243, 110, 32, 100, 101, 32, 112, 97, 112, 97, 115, 
32, 97, 108, 32, 97, 108, 105, 111, 108, 105]

Como ejercicio te propongo que realices la misma operación empleando la metodología tradicional.

Me ha entrado mucha hambre escribiendo esto, de modo que continuaremos hablando otro día de las listas por comprensión y presentaremos una nueva sintaxis ampliada que las hará más potentes aún.

Javier Montero Gabarró


Python – Listas por comprensión – 1


El texto de este artículo se encuentra sometido a una licencia Creative Commons del tipo CC-BY-NC-ND (reconocimiento, no comercial, sin obra derivada, 3.0 unported)


El Club del Autodidacta


Consulta el índice completo de artículos relacionados con Python.

Armonización de la escala mayor – 1

Objetivo: presentar la serie dedicada a la armonización de la escala mayor y entender el concepto de acorde diatónico.

En la vida de todo músico, particularmente si se tiene interés en la composición, hay un hito formativo que marca un claro antes y después: el conocimiento de la armonización de la escala mayor.

Recuerdo mis primeros pinitos en la guitarra tratando de descubrir los acordes de las canciones que me gustaban. En buena parte se trataba de una cuestión de ensayo y error entre todos los acordes que me conocía hasta que encontraba alguno que parecía atinar.

Mis primeras composiciones también eran un tanto caóticas. Mezclaba acordes sin ton ni son y trataba de encontrar melodías que se ajustaran a ellos. Mis únicas guías eran la intuición y ver cómo lo hacían otros y, aunque en música la intuición es siempre la mejor de las guías, tener cierta conciencia de lo que uno está haciendo facilita las cosas y puede ayudarte en el proceso creativo.

Tal vez te hayas planteado en alguna ocasión cuestiones como estas:

«Quiero escribir una canción en Sol menor, ¿qué acordes puedo utilizar?»

«Estando en la tonalidad de Fa mayor, ¿puedo usar un acorde de La mayor?»

Estas preguntas tienen truco, desde luego… En música puedes usar las notas y acordes que te dé la gana. El gran músico y profesor Jamie Aebersold solía decir que no hay notas equivocadas, sólo pobres elecciones. Lo cierto es que debes hacerte responsable de tus decisiones y, hasta cierto punto, del efecto que estas provoquen en quien te escuche.

El hecho de optar por una tonalidad concreta ya lleva implícito un conjunto de notas «seguras» sobre las que nos apoyaremos para construir la melodía y armonía. Son seguras en el sentido de que son las que nuestros oídos, educados durante tanto tiempo en nuestro sistema tonal occidental, aceptarán sin discusión.

Si, por ejemplo, vamos a componer una canción en Fa mayor, esas notas seguras no son otras sino las que corresponden a la escala del mismo nombre:

Fa mayor: Fa – Sol – La – Si bemol – Do – Re – Mi – Fa

[Si no sabes construir esta escala, permíteme que te sugiera la lectura del artículo del blog en el que explico cómo construir la escala mayor en cualquier tonalidad.]

De entre las doce notas existentes en nuestro sistema musical, hemos elegido un subconjunto de siete concretas. Una melodía escrita en Fa mayor está centrada en una nota principal, Fa, denominada la tónica, alrededor de la cual bailan las restantes de la escala.

¿Qué acordes debo utilizar, por lo tanto, si quiero armonizar una melodía escrita en Fa mayor?

La respuesta es muy sencilla: aquellos que están compuestos de notas que pertenecen a la escala de Fa mayor.

La mayoría de nuestra música occidental está escrita así, empleando una escala diatónica de 7 notas armonizada por acordes derivados de la misma escala.

Estos acordes, a los que nos referiremos de ahora en adelante como diatónicos, son los que funcionan, la apuesta segura si queremos que nuestra música sea aceptada con facilidad.

Ahora bien, limitar la creación musical a únicamente el empleo de escalas y acordes diatónicos es ponerle rejas a nuestra creatividad. Como niños desobedientes, nos gusta desafiar al sistema tonal introduciendo notas y acordes non gratos en nuestras melodías y armonías. Eso nos hace sentirnos más libres (aunque, en el fondo, sigamos siendo prisioneros) y nuestras composiciones pueden resultar más interesantes.

Hace mucho que no escribo una canción con acordes completamente diatónicos (aunque siempre supone un buen reto hacerlo) y, camuflado entre la mafia de acordes de la tonalidad, suelo colar algún que otro infiltrado, buscando hacer sentir algo especial al oyente.

A lo largo de la serie de Armonía del blog aprenderemos algunas categorías de acordes no diatónicos que podemos infiltrar fácilmente y que, con el paso del tiempo, han sabido ganarse ya el respeto de nuestros oídos y son aceptados como si fueran de la familia. Pero antes de eso has de invertir tiempo conociendo el universo diatónico.

De modo que tu primera labor como compositor no es otra sino conocer cuáles son esos acordes diatónicos pues, a no ser que tires por otros derroteros, como por ejemplo la música atonal, constituirán la gran mayoría de los acordes que utilizarás en tus creaciones. De ellos hablaremos precisamente en la saga de artículos que hoy comienza.

Antes de aprender qué acordes son esos, conviene que te familiarices con el ejercicio inverso y realices algunos ejercicios como los siguientes:

– Estando en la tonalidad de Fa mayor, ¿puedo usar el acorde La mayor?

Ya hemos visto que la pregunta, tal como está planteada, es poco afortunada, de modo que replanteémosla:

¿Es el acorde La mayor diatónico de la tonalidad de Fa mayor?

Para responder a esa pregunta basta con descomponer el acorde La mayor en sus notas simples y comprobar si pertenecen a la escala Fa mayor, es decir, a la escala

Fa mayor: F – G – A – Bb – C – D – E – F

El acorde tríada La mayor es:

La mayor: A – C# – E

Como ves, la tercera del acorde, C# no forma parte de la escala. Por lo tanto La mayor no es un acorde diatónico en esa tonalidad.

Sin embargo, La menor (A – C – E) sí que lo sería. En un tema escrito en Fa mayor el acorde La menor siempre sonará de perlas.

[Si no sabes descomponer un acorde en sus notas constituyentes, puedes echarle un vistazo a la serie Construcción de acordes, en la que se desgrana cada tipo de acorde, desde los más simples como las tríadas hasta los más complejos con cinco o más notas.]

– En la tonalidad de Do mayor, ¿es Fmaj7 un acorde diatónico?

La escala:

Do mayor: C – D – E – F – G – A – B – C

El acorde:

Fmaj7: F – A – C – E

Todas sus notas están incluidas en la escala de Do mayor, de modo que le ponemos la pegatina con el visto bueno.

En cambio, un acorde de séptima, F7, ya no lo sería, pues incorpora un Eb en lugar de E.

Ejercítate tú mismo con otras escalas y acordes.

En el próximo artículo descubriremos qué acordes, en su versión más simple, las tríadas, son los diatónicos de Do mayor (la más fácil de las escalas mayores) y extraeremos conclusiones extrapolables al resto de las tonalidades mayores.

Javier Montero Gabarró


http://elclubdelautodidacta.es/wp/2013/04/armonizacion-de-la-escala-mayor-1/


El texto de este artículo se encuentra sometido a una licencia Creative Commons del tipo CC-BY-NC-ND (reconocimiento, no comercial, sin obra derivada, 3.0 unported)


El Club del Autodidacta


Índice de todos los artículos de armonía.

Java: El concepto de clase

lasecreObjetivo: presentar el concepto de clase, pilar sobre el que está construido todo el paradigma de la programación orientada a objetos.

Voy a proponerte un sencillo juego. Sal a la calle, mira a tu alrededor y contempla el mundo de un modo particular.

Veo veo… ¿Qué ves?
Una cosita… ¿Y qué cosita es?

Para empezar, quiero que identifiques qué tipos de objetos ves…

Puedes, por ejemplo, encontrarte coches, bares, semáforos o personas, por citar sólo unos cuantos tipos. Date cuenta de que, cuando digo tipos de objetos, hablo de un modo conceptual y general. Si te resulta chocante referirte a una persona como un objeto, prueba a sustituir la expresión por tipos de entidades, en su lugar.

Tipo y clase son dos términos sinónimos, de modo que vamos a cambiar «tipos de objetos» por «clases de objetos», aproximándonos un poco más al concepto que da pie al artículo de hoy.

¿Qué clases de objetos vemos? Coches, bares, semáforos, personas…

La siguiente transformación lingüística consiste en simplificar clases de objetos por simplemente clases:

¿Qué clases vemos? Coches, bares, semáforos, personas…

Y ahora sí, nos sumergimos plenamente en la terminología de la programación orientada a objetos:

Tenemos la clase Coche, la clase Bar, la clase Semáforo, la clase Persona

Poco interesan ahora los detalles concretos. No importa si esa persona es Marta, está en el bar «Casa Manolo», si tiene un Seat Panda o si el semáforo está en rojo. Estamos pensando en términos clasificatorios.

Vamos a adentrarnos ahora en el interior de cada una de estas clases.

¿Cómo son los coches? ¿Qué características pueden diferenciar uno de otro?

Por ejemplo, podríamos indicar la marca, el modelo, el color, la cilindrada, etc.

A las características las vamos a denominar atributos, término muy utilizado en la programación orientada a objetos.

¿Qué atributos tiene la clase Bar?

Todo bar tiene un nombre, una ubicación, un estado (si está abierto o cerrado), una lista de precios,…

Como atributos de la clase Semáforo podríamos indicar su ubicación y estado (rojo, verde o ámbar).

La clase Persona podría definir como atributos el nombre, sexo, edad, estado civil, altura, etc.

A continuación pensemos en el comportamiento de estas clases. Preguntémonos qué cosas hacen, qué tipo de acciones pueden realizar.

Un coche puede arrancar, detenerse, girar a la izquierda, acelerar, frenar, encender sus luces. Un semáforo puede cambiar de estado. Un bar puede abrir, cerrar, servirte una cerveza, cobrarla, modificar la lista de precios. Una persona puede hablar, dormir, conducir un coche, tomarse una cerveza en un bar.

En terminología de la programación orientada a objetos, a estas funciones que determinan el comportamiento de una clase se las conoce como métodos.

Sabemos lo que es una clase y que está compuesta de atributos y métodos. Nuestra labor ahora consistirá en modelar en Java estas clases.

Modelar no es otra cosa sino crear una abstracción que represente de algún modo una determinada realidad.

Para crear en Java la clase Coche procederíamos del siguiente modo:

class Coche
{
}

Entre las llaves introduciremos los atributos y métodos de que consta la clase. Observa el uso de la palabra reservada class.

El nombre Coche lo escribimos con la primera letra en mayúsculas, pues es de común acuerdo entre los programadores en Java que los nombres de clases empiecen así.

Introduzcamos algunos atributos:

class Coche
{
  String marca;
  String modelo;
  String color;
  int numeroDePuertas;
  int cuentaKilometros;
  int velocidad;
  boolean arrancado;
}

Declarar atributos es algo similar a declarar una variable normal. El nombre del atributo se precede por su tipo. Así, en el ejemplo, tenemos tres atributos de tipo String que contendrán cadenas de caracteres; otros tres de tipo int para almacenar valores enteros; finalmente, el atributo arrancado, que utilizaremos para indicar si el coche está en marcha o no, es de tipo boolean, admitiendo como posibles valores true o false.

Los tipos int y boolean forman parte de los tipos básicos de Java, conocidos como tipos primitivos. Los presentaremos formalmente a su debido momento; por ahora es suficiente con que conozcas su existencia y cómo los utilizamos.

El tipo String, que escribimos con la primera letra en mayúsculas (lo que debería darte una pista), no es más que otra clase, como lo son las clases Coche y Persona. Es una clase muy importante en Java que encapsula un buen conjunto de métodos para trabajar con cadenas de caracteres.

El concepto importante que debes entender es que los atributos no necesariamente son siempre de tipos básicos, sino que también pueden ser de cualquier clase, incluso de una propia que nosotros mismos hayamos creado.

Por ejemplo, podríamos definir un nuevo atributo de la clase Coche, llamado conductor, en el que figure la persona (de tipo Persona) que lo conduce:

Persona conductor;

Fíjate también en la convención utilizada para nombres de variables compuestos de varias palabras. Se escriben todas juntas, pero iniciando cada palabra en mayúsculas, a excepción de la primera. Esto forma parte también del estilo de escritura Java. Es opcional, naturalmente.

Eso sí, ten siempre presente que Java distingue mayúsculas de minúsculas. No es lo mismo numeroDePuertas que numerodepuertas.

Definamos ahora los métodos de la clase Coche:


class Coche
{
  String marca;
  String modelo;
  String color;
  int numeroDePuertas;
  int cuentaKilometros;
  int velocidad;
  boolean arrancado;
  
  void arrancar()
  {
  }
  
  void parar()
  {
  }
  
  void acelerar()
  {
  }
  
  void frenar()
  {
  }

  void pitar()
  {
  }

  int consultarCuentaKilometros()
  {
  }
}

Vamos a comentar esto con cuidado…

El nombre de método viene seguido por un par de paréntesis, pues en ocasiones los métodos podrán recibir argumentos que luego se utilizarán en el cuerpo del método. Aunque el método no requiera argumentos los paréntesis son absolutamente necesarios.

Por otro lado, el nombre del método va precedido por el tipo del valor que devuelve. Hay que indicarlo incluso si el método no devuelve explicitamente ningún valor. Ese caso se indica con el tipo void.

Entre el par de llaves { } introduciremos el cuerpo del método, las instrucciones que indican su operatividad.

Escribamos algo de código básico en cada uno de ellos:

class Coche
{
  String marca;
  String modelo;
  String color;
  int numeroDePuertas;
  int cuentaKilometros;
  int velocidad;
  boolean arrancado;
  
  void arrancar()
  {
    arrancado = true;
  }
  
  void parar()
  {
    arrancado = false;
  }
  
  void acelerar()
  {
    velocidad = velocidad + 1;
  }
  
  void frenar()
  {
    velocidad = velocidad - 1;
  }
  
  void pitar()
  {
    System.out.println("Piiiiiiiiiiiiiiiiii");
  }

  int consultarCuentaKilometros()
  {
    return cuentaKilometros;
  }
}

Es prácticamente autoexplicativo: los métodos arrancar() y parar() establecen el atributo booleano arrancado a true y false, respectivamente. Los métodos acelerar() y frenar() incrementan y decrementan en una unidad, respectivamente, el atributo velocidad. El método pitar() imprime en consola una cadena de caracteres. El método consultarCuentaKilometros() devuelve a quien lo invoca (fíjate en el return) lo que contiene el atributo cuentaKilometros. Observa que es el único que devuelve explícitamente un valor (de tipo entero); los restantes, aunque algunos modifican los atributos de la misma clase, no devuelven ningún valor a quien los llama.

Podríamos modelar la clase Persona del siguiente modo:

class Persona
{
  char sexo;
  String nombre;
  int edad;
  Coche coche;   // El coche que conduce esa persona
  
  void saludar()
  {
    System.out.println("Hola, me llamo " + nombre);
  }
  
  void dormir()
  {
    System.out.println("Zzzzzzzzzzz");
  }
  
  int obtenerEdad()
  {
    return edad;
  }
}

Fíjate que uno de los atributos es precisamente de la clase Coche que acabamos de definir:

Coche coche;

No confundas el nombre del atributo (coche, en minúsculas), con el nombre de la clase (Coche, con la primera en mayúsculas). Recuerda, nuevamente, que para Java son identificadore distintos.

Te propongo como ejercicio que te entretengas modelando las otras clases, u otras de tu elección, para asentar estos conceptos.

Las entidades no tienen por qué ser tangibles, necesariamente. El siguiente código modela nuestras emociones:

class Emocion
{
  String emocion;
  
  String obtenerEmocion()
  {
    return emocion;
  }
  
  void cambiarEmocion(String nuevaEmocion)
  {
    emocion = nuevaEmocion;
  }
}

El método obtenerEmocion() devuelve a quien lo invoca la cadena de caracteres referenciada en el atributo emocion. El método cambiarEmocion(), que requiere como argumento una cadena de caracteres, se ocupa de modificar el atributo con el argumento facilitado.

Lo verdaderamente importante es que comprendas el concepto de clase. No te preocupes si te resultan quizás algo oscuros algunos de los ejemplos; oportunamente profundizaremos en todas estas cuestiones.

¿Qué hacemos con nuestras flamantes clases recien creadas?

Típicamente las almacenaremos, cada una, en su propio fichero .java.

Créate una carpeta común y vuelca en ella los ficheros Coche.java, Persona.java y Emocion.java.

Podemos compilarlas, todas a la vez, del siguiente modo:

javac *.java

Obteniendo, si no hay errores, los ficheros Coche.class, Persona.class y Emocion.class.

En el próximo artículo utilizaremos estas clases, momento en el que introduciremos otro concepto esencial, el de objeto.

Javier Montero Gabarró


Java: El concepto de clase


El texto de este artículo se encuentra sometido a una licencia Creative Commons del tipo CC-BY-NC-ND (reconocimiento, no comercial, sin obra derivada, 3.0 unported)


El Club del Autodidacta


Índice completo de artículos sobre Java.

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.plugin cookies

ACEPTAR
Aviso de cookies