/* =============================================== Programa de ejemplo en Zero Pequeña aplicación de agenda =============================================== */ object TraitsPersona attribute + nombre = "Pepito perez"; attribute + edad = 50; attribute + telefono = "988310000"; method + putNombre(n) { nombre = n; return; } method + putEdad(ed) { if ( ed isInstanceOf Int ) edad = ed; else throw ETypeMismatch, "edad debe ser un entero"; return; } method + putTelefono(tlf) { telefono = tlf; return; } method + toString() { reference toret = nombre; toret = toret.concat( ": edad " ); toret = toret.concat( edad.toString() ); toret = toret.concat( ", tlf: " ); toret = toret.concat( telefono ); return toret; } endObject object Persona : TraitsPersona endObject object Agenda : Map endObject object AplicacionAgenda : ConsoleApplication attribute + agenda = Agenda; method + masPersonas() { [ DOC = "Permite al usuario introducir más personas en la agenda" ] reference nombre; reference edad; reference telefono; reference toret; System.console.write( "Introduzca el nombre: " ); nombre = System.console.read(); System.console.write( "Introduzca su edad: " ); edad = Int.parseString( System.console.read() ); System.console.write( "Introduzca su teléfono: " ); telefono = System.console.read(); toret = Persona.copy( "" ); toret.putNombre( nombre ); toret.putEdad( edad ); toret.putTelefono( telefono ); agenda.add( nombre, toret ); System.console.write( nombre.concat(" fue añadido a la agenda ... ") ); System.console.lf(); System.console.lf(); return toret; onException(e) { System.console.write( "La edad requiere un número." ); System.console.lf(); System.console.lf(); } } method + buscarPersona() { reference nombrePersona; reference persona; System.console.write( "Introduzca un nombre: " ); nombrePersona = System.console.read(); persona = agenda.lookUp( nombrePersona ); System.console.write( persona ); System.console.lf(); System.console.lf(); return Nothing; onException(e) { System.console.write("No se encontró a esa persona."); System.console.lf(); System.console.lf(); } } method + mostrarPersonas() { System.console.write( "\nContenido de la agenda\n\n" ); agenda.process( DisplayByConsoleProcessor ); System.console.lf(); return; } method + hazPersistente() /* Sólo es necesario crear el contenedor la primera vez */ { agenda = psRoot.InfoAplicacionAgenda.Agenda; System.console.write( "\nArrancando del container ...\n" ); return; onException( e ) { System.console.write( "\nArrancando sin datos ...\n" ); // No se encontró, crearlo reference cnt = Container.createChild( "InfoAplicacionAgenda" ) ; cnt.add( agenda ); cnt.add( TraitsPersona ); cnt.add( Persona ); psRoot.add( cnt ); } } method + doIt() { reference op; reference opFinal; reference opciones = VectorInstance.copy( "" ); // Inicialización parent.prepare(); this.hazPersistente(); opciones.add( "1. Añadir persona a la agenda" ); opciones.add( "2. Buscar persona en la agenda" ); opciones.add( "3. Mostrar personas en la agenda" ); opciones.add( "4. Salir" ); System.console.write( "Agenda v0.2 Serial 20060929\n\n" ); opFinal = opciones.size(); do { // Mostrar menú opciones.process( DisplayByConsoleProcessor ); // Pedir opción System.console.write( "\nPersonas en la agenda: " ); System.console.write( agenda.size() ); System.console.write( "\n\nIntroduzca opción: " ); op = Int.parseString( System.console.read() ); System.console.lf(); // Ejecutar cada opcion if ( op == 1 ) { this.masPersonas(); } else if ( op == 2 ) { this.buscarPersona(); } else if ( op == 3 ) { this.mostrarPersonas(); } else if ( op != opFinal ) { System.console.write( "Opción no válida.\n" ); } } while( op != opFinal ); System.console.write( "Fin.\n" ); return Nothing; onException(e) { System.console.write( "Es necesario introducir un número.\n" ); } } endObject