Patricio Aros

xd

jueves, 15 de diciembre de 2011

Presentaciones - Base de Datos

Autor: Patricio Aros Erices
Competencia: Comunicación oral y escrita
Palabras claves: MySql, Base de Datos

En la materia de Introduccion a los sistemas de Base de Datos debiamos ir presentando semana por medio, no obstante ese dia en medio debiamos hacer un postear el cual debia ir resumiendo la materia estudiada de O'Reilly y de la materia pasada en clases cátedra. Dentro de la materia de select avanzado tenemos varios avances como son consultas de mayor nivel y más precizas u óptimas, donde usamos nuevos parametros como ORDER BY, o CASE, para simplicar un poco hicimos el siguiente poster:
Link al Poster 
  
Reflexión
A manera de usar comunicación escrita, en este poster se demuestra el uso de ella, ya que en espacios delimitados debiamos poner información concreta y de gran importancia, asi tambien haciendo uso de herramientas gráficas para llamar la atención del lector y poner un énfasis dentro de la lectura que se realiza , en base de datos como mecioné anteriormente no solo era la comunicación escrita que se nos comenzo a desarrollar sino tambien la oral en cuanto a las presentaciones que se realiazaban semana por medio dejando e implementando desde el principio una manera de integrarse mejor con los demas y poder desarrollar habilidades personales como es la expresion de ideas

Taller Integracion - Presentacion Sprint

Autor: Patricio Aros Erices
Competencia: Comunicación oral y escrita
Palabras claves: Python, Juego Plataforma, Infrarrojo, Puerto Serial, Sprint(traducido), Scrum

Dentro de la materia o la asignatura en sí, debiamos ir presentando cada semana un sprint de lo realizado, en esta usabamos metodos recomendados por los profesores como es Scrum y otras guias que se pusieron a nuestra disposicion.
La actividad principal de la asignatura era realizar un proyecto para presentarlo a final de semestre aplicando conocimientos del primer semestre ya pasado.
Nuestro proyecto se llamaba NexusGames constaba en una interfaz entre un control y un computador que se comunicaba a travez de un sensor infrarojo y puerto serial el cual resivia los datos enviados por el control. Por otra parte lo que me toco disertar a mi en un Sprint especifico fueron los juegos que estabamos realizando para controlarlos con el control, como una forma economica de tener o poder manejar 2 aparatos al mismo tiempo y tener diversion en una pc al mismo tiempo.

En Resumidas cuentas en las presentacion debiamos presentar un grafico de Burn-Down que es una representación gráfica del trabajo por hacer en un proyecto en el tiempo. Aqui en la imagen de al lado tenemos un ejemplo de como se realiza el gráfico, la linea del media es lo "ideal" y la que varia es como se ha llevado a cabo el trabajo en sí.


Esto era una parte de lo que se presentaba en un Sprint, en el mismo eran presentados los avances del proyecto que teniamos cada semana, en nuestro caso los juegos eran realizados en python con una libreria PyGame, en mi caso presentaba mi juego el cual constaba de un juego de plataforma tipo lucha, donde salian enemigos por los costados y un guerrero debia defenderse, en un avanze especifico presente este el cual mostraba a mi personaje moviendo por la ventana con movimiento o mas bien dicho con Sprites que son imagenes separadas que dan la sensacion de movimiento al personaje. Dejo a continuacion el codigo Fuente para que se pueda analizar

  1 import pygame, sys
  2 from pygame.locals import *
  3 import time
  4 
  5 pygame.init()
  6 
  7 visor = pygame.display.set_mode((800, 600), 0, 32)
  8 #cargar imagen  y la invertida para sentido contrario
  9 fotogramas = pygame.image.load('Walking.gif').convert()
 10 fotogramas2 = pygame.transform.flip(fotogramas,True, False)
 11 
 12 
 13 pos = 100
 14 #sprite dividido
 15 guy = {}
 16 guy2 = {}
 17 guy[0] = (0, 0 , 52, 94)
 18 guy2[0]= (53*5, 0, 53,94)
 19 guy[1] = (53*1, 0, 53, 94)
 20 guy2[1] = (53*4, 0, 53,94)
 21 guy[2] = (53*2, 0, 53, 94)
 22 guy2[2] = (53*3, 0, 53,94)
 23 guy[3] = (53*3, 0, 53, 94)
 24 guy2[3] = (53*2, 0, 53,94)
 25 guy[4] = (53*4, 0, 53, 94)
 26 guy2[4] = (52*1, 0, 53,94)
 27 guy[5] = (53*5, 0, 53, 94)
 28 guy2[5] = (0, 0, 52,94)
 29 
 30 # Controlando la direccion
 31 izquierda = True
 32 #controlar cual sprite
 33 cual = 0
 34 #para controlar el tiempo del sprite
 35 cuanto = 100
 36 tiempo = 0
 37 # Funcion que actualiza el fotograma
 38 def actualizar():
 39     global cual, pos, tiempo
 40     if izquierda:
 41         pos = pos + 1
 42     else:
 43         pos = pos - 1
 44     if pygame.time.get_ticks()-tiempo > cuanto:
 45         tiempo = pygame.time.get_ticks()
 46         cual = cual + 1
 47         if izquierda:
 48             if cual == 3 or cual == 5:
 49                 pos = pos + 4
 50             if cual > 5:
 51                 cual = 1
 52         else:
 53             if cual == 3 or cual == 5:
 54                 pos = pos - 4
 55             if cual > 5:
 56                 cual = 1
 57 
 58 
 59 
 60 def load_image(filename, transparent=False):
 61         try: image = pygame.image.load(filename)
 62         except pygame.error, message:
 63                 raise SystemExit, message
 64         image = image.convert()
 65         if transparent:
 66                 color = image.get_at((0,0))
 67                 image.set_colorkey(color, RLEACCEL)
 68         return image
 69 
 70 background_image = load_image('backg.png')
 71 pygame.mixer.music.load('Music1.mp3')
 72 pygame.mixer.music.play(2)
 73 
 74 
 75 while True:
 76     for event in pygame.event.get():
 77         if event.type == QUIT:
 78             pygame.quit()
 79             sys.exit()
 80     visor.blit(background_image, (0, 0))
 81 
 82     teclasPulsadas = pygame.key.get_pressed()
 83     if teclasPulsadas[K_a]:
 84         izquierda = False
 85         actualizar()
 86     elif teclasPulsadas[K_s]:
 87         izquierda = True
 88         actualizar()
 89     else:
 90         cual = 0
 91         if pygame.time.get_ticks()-tiempo > cuanto:
 92             tiempo = pygame.time.get_ticks()
 93             cual = cual + 1
 94             if cual > 5:
 95                 cual = 1
 96     visor.blit(background_image, (0, 0))
 97 
 98     if izquierda:
 99         visor.blit(fotogramas, (pos,312), guy[cual])
100     else:
101         visor.blit(fotogramas2, (pos,312), guy2[cual])
102 
103     pygame.display.update()
104 
Para Finalizar una imagen de como estaba diseñado el juego y como se veia principalmente:
 
Reflexion
 A manera de presentación y expresión esta fue una asignatura y proyecto en sí que nos dejo bastante conocmiento y ademas el hecho que desarrollo de gran manera la habilidad de presentar frente a un grupo determinado de personas de manera oral, asi mismo se desarrollo la personalidad que complementa a lo mecionado anteriormente, sin dudas una actividad que nos hizo desarrollar grandes rasgos de nosotros mismos.

miércoles, 14 de diciembre de 2011

Proyecto Final - Proyecto Robótica(Robot Guitar)

Autor: Patricio Aros Erices
Compentecia: Aprendizaje autónomo
Palabras Clave: NXC, Lego(MindStorm)


 Este proyecto era realizado completamente por nosotros y desarrollado a manera de nuestros parametros establecidos, aun asi con un orden comun de un trabajo serio.

Contexto: Para un recital de rock que se efectuará en una fecha determinada, le asignan construir una guitarra robot, que le permita tocar un sonido grueso y envolvente. Como el guitarrista de la banda no posee conocimientos de música, deberá diseñar un robot que sea fácil de usar. Para esto, deberá cumplir con las siguientes características:

· Para esta actividad, se requiere manejar las estructuras de datos Arreglos (Arrays) y Archivos, y manejo de tareas concurrentes.

· Debe contar con 8 acordes básicos (o notas musicales): Do, Re, Re sostenido, Mi, Sol, Sol sostenido, La y La menor.

· Las notas musicales deberán ser mostradas en pantalla cada vez que sea pulsada.

· Cada acorde deberá contar con su propia tarea, que finalmente será ejecutado en orden.
· Al final de tocar la melodía, deberá ser almacenada en un fichero txt para posteriormente ser visto más tarde (WriteLnString).

A continuación problemas que iban surgiendo a travez del desarrollo o más bien como podrias realizar la actividad de manera más comun o simple.
1) Diferenciar las notas:

Solución: Se guardó cada nota en un rango de distancia detectada por el sensor de proximidad.

Ejemplo:


if(Notas[j]>=10&&Notas[j]<12){ // verifica las distacias para asignar las notas

cadena= "La";

cadena=nota+cadena; // se une los strig cadena y nota para generar una frase : la nota es "la".

cadena = cadena + linea;

WriteLnString(punteroArchivo, cadena, bytesEscritos); //Escribe la nota definifa dentro del archivo

}
2) Reproducir un sonido similar a una guitarra eléctrica.

Solución: Se importaron archivos de extensión “.rso”dentro del ladrillo, luego se llama a través del código NXC.

Ejemplo:

while(true){

if(ButtonPressed(BTNCENTER, false)){ //verifica si el boton central es presionado


if(SensorUS(IN_4)<=12){


PlayFileEx("Guitar_A_high.rso", 7,0); //Reproduce el un archivo .rso con maximo volumen

Wait(300); //durante 3 milisegundos


Notas[i]= SensorUS(IN_4); //guarda el valor entregado por el sensor de proximidad dentro del arreglo.

i++;

3) Llevar un registro de las últimas 5 notas tocadas por la guitarra

Solución: Se creó u n archivo llamado “notas.txt”en el cual guardamos a través de arreglos las últimas 5 notas registradas:

Extracto del código:


DeleteFile("Notas.txt"); //borra archivo

CreateFile("Notas.txt", tam, punteroArchivo); //Crea un nuevo archivo

WriteLnString(punteroArchivo, "Notas", bytesEscritos);// Escribe en el archivo

for(j=0; j < ArrayLen(Notas); j++) //recorre el arreglo para definir la nota.

{if(Notas[j]>=10&&Notas[j]<12){ // verifica las distacias para asignar las notas

cadena= "La";

cadena=nota+cadena; // se une los strig cadena y nota para generar una frase : la nota es "la".

cadena = cadena + linea;

WriteLnString(punteroArchivo, cadena, bytesEscritos); //Escribe la nota definifa dentro del archivo

}

if(Notas[j]>=12&&Notas[j]<14){

cadena= "Do";

cadena=nota+cadena;

cadena = cadena + linea;

WriteLnString(punteroArchivo, cadena, bytesEscritos);

Teniendo mas o menos la base de como poder realizar el proyecto, se comenzo haciendo una especie de pseudocodigo que debia ser lo más explicativo posible logrando algo como lo siguiente, al final de este segmento de pseudodigo encontraran el codigo fuente usado:

//Pseudocódigo
subrutina TraspasarArchivo(){
crear archivo;
escribir en el archivo;
guardar notas en una cadena;
guardar cadena en archivo;
si(Distancia>=12 && Distancia<14){
cadena="Do"
guardar cadena en archvio;
}
si(Distancia>=14 && Distancia<16){
cadena="Re"
guardar cadena en archvio;
}
si(Distancia>=16 && Distancia<18){
cadena="Re#"
guardar cadena en archvio;
}
si(Distancia>=18 && Distancia<20){
cadena="Mi"
guardar cadena en archvio;
}
si(Distancia>=20 && Distancia<22){
cadena="Sol"
guardar cadena en archvio;
}
si(Distancia>=22 && Distancia<24){
cadena="Sol#"
guardar cadena en archvio;
}
si(Distancia>=24 && Distancia<26){
cadena="Lam"
guardar cadena en archvio;
}
}
Cerrar archivo;

}
tarea la(){
mientras sea(verdadero){
si(Boton central es presionado) {
si(Sensor Proximidad <=12) {
Reproducir sonido;
durante 3 milisegundos;
guardar distancia en arreglo;
}
}
}
}
tarea DO(){
mientras sea(verdadero){
si(Boton central es presionado) {
si(Sensor Proximidad>12 y <=14) {
Reproducir sonido;
durante 3 milisegundos;
guardar distancia en arreglo;
}
}
}
tarea re(){
mientras sea(verdadero){
si(Boton central es presionado) {
si(Sensor Proximidad>14 y <=16) {
Reproducir sonido;
durante 3 milisegundos;
guardar distancia en arreglo;
}
}
}
tarea resostenido(){
mientras sea(verdadero){
si(Boton central es presionado) {
si(Sensor Proximidad>16 y <=18) {
Reproducir sonido;
durante 3 milisegundos;
guardar distancia en arreglo;
}
}
}

tarea mi(){
mientras sea(verdadero){
si(Boton central es presionado) {
si(Sensor Proximidad>18 y <=20) {
Reproducir sonido;
durante 3 milisegundos;
guardar distancia en arreglo;
}
}
}
tarea sol(){
mientras sea(verdadero){
si(Boton central es presionado) {
si(Sensor Proximidad>20 y <=22) {
Reproducir sonido;
durante 3 milisegundos;
guardar distancia en arreglo;
}
}
}
tarea solsostenido(){
mientras sea(verdadero){
si(Boton central es presionado) {
si(Sensor Proximidad>22 y <=24) {
Reproducir sonido;
durante 3 milisegundos;
guardar distancia en arreglo;
}
}
}
tarea lamenor(){
mientras sea(verdadero){
si(Boton central es presionado) {
si(Sensor Proximidad>24 ) {
Reproducir sonido;
durante 3 milisegundos;
guardar distancia en arreglo;
}
}
}

subtarea imprimir(){
Llama sub TraspasarArchivo();
Limpia la pantalla;
Abre nuestro archivo;
Revisa que todo este correcto;
Si (es correcto?)
Imprime en pantalla;
Espera 5 segundos;
Cierra el archivo;
}
tarea archivo(){
mientras sea(verdadero){
si(El boton izquierdo es presionado)
{imprimir();

}
}
}

ejecutar tareas(){
Encender sensor proximidad(puerto_4);
preceder(la,DO,re,resostenido,mi,sol,solsostenido,lamenor,archivo)

}

}

}




Reflexión
Logrando terminar el proyecto, fue una experiencia genial y un tanto agotadora por el hecho de que debiamos realizar todo el trabajo de ver o crear el contexto y realizar la actividad más o menos a la par, es así como tambien aprendimos a travez de estudios en internet y usando como ejemplos diferentes actividades publicada por profesores llegamos a una actividad completa, cabe mencionar que debiamos hacer uso de programas externos como es el Software original de lego mindstorm que era para poner nuevos sonidos dentro del ladrillo NXT y lograr poner las notas musicales en el mismo, y aplicando gran cantidad de nuevas sentencias como lo eran algunos para poder usar los botones del mismo NXT sin hacer uso de otros sensores como los de tacto o similar. Una actividad que deja gran sabiduria y que puede transformarse en un ejemplo para actividades futuras.


Foro - Mant. & Adm. de Sistemas

Autor: Patricio Aros Erices
Competencia: Actuación ética
Palabras clave: GNU/GPL, Ética, Informática

En un foro creado por nuestro profesor, nos hizo unas preguntas las cuales fueron las siguientes:

  1. ¿ Cuáles son las responsabilidades éticas en la manejo de la información ?
  2. ¿ Es posible poder determinar un marco ético informático ?
  3. "Otras consideraciones éticas informáticas están en relación con el uso de del software y su propiedad intelectual. Existiendo alternativas de licenciamiento GNU/GLP, ¿ Es ético usar software con licenciamiento privativo sin pagar derechos de autor ?"
Claro está, cada uno tenia un punto de vista diferente y asi diferente opinion en cuanto a c/u de los temas, segun mi punto de vista fue este el hecho por el cual se generaron este tipo de interrogantes.

Para mi la respuesta de la número uno, aunque determinemos personalmente la ética de manejo de la información, hay que decir que no todo lo que digamos se valla a cumplir debido a que cada persona puede hacer uso de esta información de manera como se le plasca aun existiendo estánderes dentro de alguna organización o empresa donde se desarrolle un problema similar, aun asi personalmente bajo mi ética creo que la información que debemos manejar debe estar bajo la seguridad mas óptima posible, seguir un estricto orden para poder modificarlos y/o actualizarlos y también hacer el mejor uso posible de estas(informaciones) cuando sea necesaria.

Determinar un marco ético informático también tiene un grado de dificultad por el hecho mencionado arriba, ya que la ética de cada persona o grupo social puede divergir ocacionando grandes problemas, no obstante es posible poner o determinar un marco ético informatico dentro de la sociedad(o tambien un grupo)

Logo GNU(General Public Licence)
Entretando y cambiando drasticamente el tema en la tercera pregunta que se encontraba en un foro aparte creo que no lo es, ¿Por qué? por el simple hecho de que como mencionan varios de mis colegas, de no ser por el dinero, gran cantidad de software que hoy en día existe, no estaria tan avanzado como lo notamos. Ya que, si bien ganan dineros los autores estos se animan a encontrar y seguir mejorando y mejorando dicho software hasta encontrar una herramienta que es muy util en distintos ambitos. Aun asi cabe destacar que gran parte del mundo y personas, no tienen la cantidad de ingresos necesarios para pagar una licencia de algun software, que en ocaciones suele ser de un valor muy alto, algo que no me gusta de algunos software. Es asi donde encontramos a esta parte de GNU/GPL, que en tanto, siguen avanzando en su tecnologia y optimizacion de software a una velocidad impresionante, utilizando maneras muy razonables para financiar sus proyectos, como es asi el de cobrar por el soporte a la modificacion de algunos de sus software para determinadas empresas o similares.
Por mi parte hago uso de estos que deberian pagarse, ya que tienen una mejor manera de trabajar, en algunas cosas. Pero como todos aqui, lo uso sin pagar(creo que ya saben a lo que me refiero), por el hecho que no poseo el dinero y que me gustaria la utopia donde todo fuera gratis y fuera completamente funcional para lo que necesito.

Reflexion
Manejando conocimiento y teniendo una idea clara de lo que se nos preguntaba, no fue muy dificil responder a ellas, sin embargo como era un foro, varias opiniones chocaban, yo me di cuenta de eso, ya que generalmente se arman discuciones con respecto a algunos temas en especifico, pero creo que deja claro que c/u de la personas puede o tiene puntos de vista diferentes de como tratar las cosas.

miércoles, 7 de diciembre de 2011

Cliente Servidor - Bonus Point 8:TreeSet de Autos

Autor: Patricio Aros Erices.
Competencia: Creatividad e Innovación.

Crear una colección del tipo TreeSet, que guarde 8 objetos derivados de la clase Auto (crear clase), la cual posee los atributos: patente, marca, modelo, año y rut del dueño, con los métodos set y get correspondientes (similar al diseño de la clase Persona).
  
En este bonus debiamos realizar lo anterior planteado, lo cual no era muy simple, ya que lo que estamos creando son objetos treeset uno tras otro, generando una especie de tabla de datos, comenzando por lo principal para resolver el problema, fue el metodo de los 4 pasos, el primero los ejemplos...obtiendo algo similar a esto

123-4, HD123, HYUNDAI, RCX700, 1990
 432-1, XDER1, MAZDA, Jumanji, 2000
464-5, JAE83, Mercedes, McLaren ,2011
111-1, KIL12, Mercedes, Delorean ,2024
515-5, JUB12, NISSAN, SkyLine, 2010
987-6, HEAV1, TOYOTA, 4x4, 1999
222-2, ELDER, CITROEN, NOSEQUEONDA, 1992
343-8, Jubi1, Freelance, Disanto, 1982
                                  [P]
111-1 -> KIL12 -> Mercedez -> Delorean -> 2024
123-4 -> HD123 -> HYUNDAI -> RCX700 -> 1990
222-2 -> ELDER -> CITROEN -> NOSEQUEONDA -> 1992
343-8 -> Jubi1 -> Freak -> Disanto -> 1982
432-1 -> XDER1 -> MAZDA -> Jumanji -> 2000
464-5 -> JAE83 -> Mercedez -> McLaren -> 2011
515-5 -> JUB12 -> NISSAN -> SkyLine -> 2010
987-6 -> HEAV1 -> TOYOTA -> 4x4 -> 1999

Lo mejor que tiene la clase TreeSet y como se puede utilizar es que es una especie de primary key, osea en el treeset no pueden haber datos iguales o seran eliminados y otra gracia que tiene es que los datos se ordenan solos, en nuestro caso como son varios datos dentro de un treeset se debia decirle como ordenarlos, usando el  compareTo() pero se sobreescribe ya que nosotros le daremos la idea de como ordenar los datos.
Un pequeño analisis de lo que hace el treeset o nuestro programa realmente es lo sig.
Aquí se muestra como se van guardando los datos ingresados dentro de un objeto tipo Auto

Diagrama del programa
Esto nos muestra que ingresamos los datos y estos se van a un objeto que debemos crear y el cual es Autos dentro de este se guardaran todos los datos para luego ser comparados, tenemos entonces la base de lo que hara nuestro programa, siguiendo un poco más aqui muestro el diagrama que realize, es simple pero explica en simples palabras lo que hace el programa.


Ahora el código, aquí hay 2 clases Auto. ya que necesitamos los objetos y los get y set correspondientes y la clase principal que hace uso de esta primera. pues bien aqui esta el codigo de la clase auto


public class Auto implements Comparable {
    String patente;
    String marca;
    String modelo;
    int año;
    String rutDueño;

    public Auto(){

    }

    public Auto(String rutDueño){
        this.rutDueño=rutDueño;
    }
    public Auto(String rutDueño,String patente,String marca,String modelo,int año){
        this.rutDueño=rutDueño;
        this.patente=patente;
        this.marca=marca;
        this.modelo=modelo;
        this.año=año;

    }
    public int getAño(){
        return año;
    }
    public void setaño(int año ){
        this.año=año;

    }
    public String getRut(){
        return rutDueño;
    }
    public void setRut(String rutDueño){
        this.rutDueño=rutDueño;
    }
    public String getPatente(){
        return patente;
    }
    public void setPatente(String patente){
        this.patente=patente;
    }
    public String getMarca(){
        return marca;
    }
    public void setMarca(String marca){
        this.marca=marca;
    }
    public String getModelo(){
        return modelo;
    }
    public void setModelo(String modelo){
        this.modelo=modelo;
    }

    @Override
    public boolean equals(Object objeto) {
        if (objeto == null) {
            return false;
        }

        Auto AutoIn = (Auto) objeto;
        String rutThis = this.getRut();
        String rutIn = AutoIn.getRut();
        System.out.println("rutThis: " + rutThis);
        System.out.println("rutIn: " + rutIn);

        if (rutThis.equalsIgnoreCase(rutIn)) {
            return true;
        }
        return false;
    }
    @Override
    public int hashCode() {
        int hash = 3;
        hash = 83 * hash + (this.rutDueño != null ? this.rutDueño.hashCode() : 0);
        return hash;
    }
    @Override
    public int compareTo(Object objetoIn){
            Auto otroAuto = (Auto) objetoIn;
            if (this.getRut().equalsIgnoreCase(otroAuto.getRut())) {
            return 0;
            }
            String[] rutDivIn = otroAuto.getRut().split("-");
            String[] rutDivThis = this.getRut().split("-");
            int rutSinGuionIn = Integer.parseInt(rutDivIn[0]); 
            int rutSinGuionThis = Integer.parseInt(rutDivThis[0]); 

            if (rutSinGuionThis > rutSinGuionIn){
            return 1;
            }
            if (rutSinGuionThis < rutSinGuionIn) {
            return -1;
            }
         return 1;
        }
    @Override
    public String toString() {
        return this.rutDueño + " -> " + this.patente + " -> " + this.marca + " -> " + this.modelo + " -> " + this.año;
    }
}


Y de manera separada tenemos la proxima clase que es la principal es decir una especie de clase que hace uso de los metodos y objetos definidos en la primera.



import java.util.Iterator;
import java.util.TreeSet;

public class CollectionTreeSetAuto {


    public static void main(String arg[]) {
        Auto car1 = new Auto("123-4", "HD123", "HYUNDAI", "RCX700", 1990);
        Auto car2 = new Auto("432-1", "XDER1", "MAZDA", "Jumanji", 2000);
        Auto car3 = new Auto("464-5", "JAE83", "Mercedez", "McLaren", 2011);
        Auto car4 = new Auto("111-1", "KIL12", "Mercedez", "Delorean", 2024);
        Auto car5 = new Auto("515-5", "JUB12", "NISSAN", "SkyLine", 2010);
        Auto car6 = new Auto("987-6", "HEAV1", "TOYOTA", "4x4", 1999);
        Auto car7 = new Auto("222-2", "ELDER", "CITROEN", "NOSEQUEONDA", 1992);
        Auto car8 = new Auto("343-8", "Jubi1", "Freak", "Disanto", 1982);

        TreeSet<Auto> listAut = new TreeSet<Auto>();
        listAut.add(car1);
        listAut.add(car2);
        listAut.add(car3);
        listAut.add(car4);
        listAut.add(car5);
        listAut.add(car6);
        listAut.add(car7);
        listAut.add(car8);

        System.out.println(" Lista posee " + listAut.size() + " Autos");

        Iterator iter = listAut.iterator();

        System.out.println("\n███ Lista Completa Autos. ███");
        while (iter.hasNext()) {
            System.out.println(iter.next().toString());
        }

    }
}


Reflexión 
Si bien es un ejercicio de bonus, presento gran desafio realizarlo ya que habiamos hecho uso anteriormente de treeset pero no de esta manera, donde se ingresan varios datos de una parte del treeset, ademas de hacer un metodo para que no se repiesen los datos y los borrara automáticamente el treeset. Personalmente me llamó mucho la atencion de esta clase y creo que se puede implementar en varios otros temas o para dar solución a los mismos en distintos ambitos.