-
Notifications
You must be signed in to change notification settings - Fork 0
/
TP1_94663Brondo_86505Serrat_94750Oliva.st
524 lines (398 loc) · 22.2 KB
/
TP1_94663Brondo_86505Serrat_94750Oliva.st
1
Object subclass: #Agencia instanceVariableNames: 'nombre paquetes' classVariableNames: '' package: 'TP1_94663Brondo_86505Serrat_94750Oliva'!!Agencia commentStamp: 'AgustinOliva 4/27/2023 09:22' prior: 0!Please comment me using the following template inspired by Class Responsibility Collaborator (CRC) design: For the Class part: State a one line summary. For example, "I represent a paragraph of text".For the Responsibility part: Three sentences about my main responsibilities - what I do, what I know.For the Collaborators Part: State my main collaborators and one line about how I interact with them. Public API and Key Messages- message one - message two - (for bonus points) how to create instances. One simple example is simply gorgeous. Internal Representation and Key Implementation Points. Instance Variables nombre: <Object> paquetes: <Object> Implementation Points!!Agencia methodsFor: 'initialization' stamp: 'Joaco 5/3/2023 10:39'!initialize nombre := 'Viaja Facil'. paquetes := OrderedCollection new.! !!Agencia methodsFor: 'accessing' stamp: 'AgustinOliva 4/27/2023 09:37'!nombre ^ nombre! !!Agencia methodsFor: 'accessing' stamp: 'AgustinOliva 4/27/2023 09:37'!paquetes ^ paquetes! !!Agencia methodsFor: 'accessing' stamp: 'Joaco 5/3/2023 13:03'!paquetes: anObject anObject class = PaqueteTuristico ifTrue: [ paquetes := anObject . ] ifFalse: [ ^'El paquete debe ser de clase PaqueteTuristico!!' ] .! !!Agencia methodsFor: 'accessing' stamp: 'Joaco 5/3/2023 13:59'!nombre: anObject (anObject isString) ifTrue: [ nombre := anObject . ] ifFalse: [ ^'El nombre debe estar entre comillas simples!!' ] . ! !!Agencia methodsFor: 'converting' stamp: 'Joaco 5/3/2023 11:16'!asString "Devuelve Agencia como cadena" ^'-Nombre de la agencia: ', self nombre asString, String cr, '-Paquetes ofrecidos: ', self paquetes asString.! !!Agencia methodsFor: 'propios' stamp: 'Joaco 5/3/2023 13:08'!paqueteMedidaPais: unPais "permite mostrar los datos completos del primer paquete a medida que tiene visa de ingreso correspondiente al país ingresado como colaborador. En caso de no encontrar un paquete que cumpla estas condiciones informar con un mensaje: “Paquete no encontrado”" |paquetesAMedida buscarVisas res| res := 'Paquete no encontrado'. "inicia la variable y le asigna el valor del caso negativo" paquetesAMedida:= self paquetes select: [ :p | p class = PaqueteMedida ]. "Crea una coleccion con los paquetes del tipo PaqueteMedida" buscarVisas := paquetesAMedida detect: [ :q | (q visa pais = unPais) ] ifNone: [ nil ]. "Detecta el primer paquete con visa del pais requerido" (buscarVisas isNotNil) ifTrue: [ res := buscarVisas asString ]. "Si encuentra uno lo devuelve como cadena" ^res! !!Agencia methodsFor: 'propios' stamp: 'Joaco 5/3/2023 11:51'!showAgencia "Muestra agencia en Transcript" Transcript open; clear; show: '-Nombre de la agencia: ', self nombre asString, String cr. self paquetes do:[ :p | Transcript show:'-Paquetes ofrecidos: ', String cr, p asString, String cr ].! !!Agencia methodsFor: 'propios' stamp: 'Joaco 5/3/2023 13:04'!buscarCircuitosFechasEspeciales "Listar los circuitos nacionales ofrecido en fechas especiales." |listaCircuitos listaEspecial| "Iniciamos las variables" listaCircuitos := self paquetes select: [ :p | p class = CircuitoNacional ]. "Crea una coleccion con los paquetes del tipo circuito nacional" listaEspecial := listaCircuitos select: [ :p | p enFechaEspecial = true ]. "Toma la coleccion anterior y filtra a los que corresponden a fechas especiales" ^listaEspecial ! !!Agencia methodsFor: 'propios' stamp: 'Joaco 5/3/2023 13:05'!generarInformePaquetes: unValor "permite generar un listado ordenado por código, de todos los paquetes ofrecidos cuyo precio final sea menor o igual o un valor de referencia recibido como colaborador." |listadoCodigo| "Inicia la variable" listadoCodigo := self paquetes select: [ :p | p calcularPrecio <= (unValor asFloat) ]. "Llena la coleccion si los precios son menores al valor ingresado." ^listadoCodigo.! !!Agencia methodsFor: 'propios' stamp: 'Joaco 5/3/2023 14:00'!registrarPaquete: anObject "permite agregar un paquete a la colección siempre que la fecha de salida sea mayor a la fecha actual." (anObject isKindOf: PaqueteTuristico) ifTrue: [ (anObject fechaDesde > Date today) ifTrue: [ paquetes add: anObject ] ifFalse: [ ^'La fecha desde debe ser mayor a la fecha actual' ]]. ! !Object subclass: #PaqueteTuristico instanceVariableNames: 'codigo nombre costoGestion fechaDesde fechaHasta' classVariableNames: '' package: 'TP1_94663Brondo_86505Serrat_94750Oliva'!!PaqueteTuristico commentStamp: 'Joaco 4/22/2023 19:04' prior: 0!Descripci‚Äö√Ñ√∂‚àö‚Ć‚àö‚àÇ‚Äö√Ñ√∂‚àö¬¢‚Äö√Ѭ¢n:Entidad gen‚Äö√Ñ√∂‚àö‚Ć‚àö‚àǬ¨¬®¬¨¬©rica que describe un paquete tur‚Äö√Ñ√∂‚àö‚Ć‚àö‚àÇ‚Äö√Ñ√∂‚àö¬¢‚Äö√тĆstico ofrecido por la empresa. Comportamientos: ‚Äö√†√∂‚àö√Ü‚Äö√†√∂‚àö¬∞‚Äö√Ñ√∂‚àö‚Ć‚àö¬¥ Inicializaci‚Äö√Ñ√∂‚àö‚Ć‚àö‚àÇ‚Äö√Ñ√∂‚àö¬¢‚Äö√Ѭ¢n ‚Äö√†√∂‚àö√Ü‚Äö√†√∂‚àö¬∞‚Äö√Ñ√∂‚àö‚Ć‚àö¬¥ mensajes de acceso y modificaci‚Äö√Ñ√∂‚àö‚Ć‚àö‚àÇ‚Äö√Ñ√∂‚àö¬¢‚Äö√Ѭ¢n ‚Äö√†√∂‚àö√Ü‚Äö√†√∂‚àö¬∞‚Äö√Ñ√∂‚àö‚Ć‚àö¬¥ calcularPrecio: que retorna el costo de gesti‚Äö√Ñ√∂‚àö‚Ć‚àö‚àÇ‚Äö√Ñ√∂‚àö¬¢‚Äö√Ѭ¢n del paquete. ‚Äö√†√∂‚àö√Ü‚Äö√†√∂‚àö¬∞‚Äö√Ñ√∂‚àö‚Ć‚àö¬¥ asString: devuelve una cadena con los datos del paquete. Instance Variables codigo: <Object> costoGestion: <Object> fechaDesde: <Object> fechaHasta: <Object> nombre: <Object> Implementation Points!!PaqueteTuristico methodsFor: 'accessing' stamp: 'Joaco 5/3/2023 12:37'!fechaDesde: anObject "La fechaDesde no puede ser menor a la fecha de hoy" anObject class = Date ifTrue:[ anObject > Date today ifTrue: [fechaDesde := anObject ] ].! !!PaqueteTuristico methodsFor: 'accessing' stamp: 'Joaco 4/22/2023 19:04'!nombre ^ nombre! !!PaqueteTuristico methodsFor: 'accessing' stamp: 'Joaco 5/3/2023 12:41'!nombre: anObject anObject isString ifTrue:[nombre := anObject] ifFalse: [ ^'El nombre debe estar entre comillas simples!!' ] .! !!PaqueteTuristico methodsFor: 'accessing' stamp: 'Joaco 5/3/2023 12:36'!codigo: anObject anObject isString ifTrue:[codigo := anObject] ifFalse: [ ^'El codigo debe estar entre comillas simples!!' ] .! !!PaqueteTuristico methodsFor: 'accessing' stamp: 'Joaco 4/22/2023 19:04'!codigo ^ codigo! !!PaqueteTuristico methodsFor: 'accessing' stamp: 'Joaco 5/3/2023 12:40'!fechaHasta: anObject "Se valida que sea clase Date y que sea mayor a fechaDesde" anObject class = Date ifTrue:[ (anObject > fechaDesde) ifTrue: [(fechaHasta := anObject)] ifFalse: [^'La fecha de regreso no puede ser menor a la fecha de salida!!'] ] ifFalse: [ ^'El formato de la fecha debe ser (Date year:yyyy month:mm day:dd)!!' ] .! !!PaqueteTuristico methodsFor: 'accessing' stamp: 'Joaco 5/3/2023 12:36'!costoGestion: anObject anObject isFloat ifTrue:[costoGestion := anObject] ifFalse: [ ^'El costo debe llevar decimales!!' ] .! !!PaqueteTuristico methodsFor: 'accessing' stamp: 'Joaco 4/22/2023 19:04'!fechaHasta ^ fechaHasta! !!PaqueteTuristico methodsFor: 'accessing' stamp: 'Joaco 4/22/2023 19:04'!costoGestion ^ costoGestion! !!PaqueteTuristico methodsFor: 'accessing' stamp: 'Joaco 4/22/2023 19:04'!fechaDesde ^ fechaDesde! !!PaqueteTuristico methodsFor: 'converting' stamp: 'Joaco 5/3/2023 11:00'!asString " devuelve una cadena con los datos del paquete." ^(' - Codigo: ', self codigo asString, String cr, ' - Paquete: ', self nombre asString, String cr, ' - Costo de gestion: $', self costoGestion asString, String cr, ' - Fecha desde: ', self fechaDesde ddmmyyyy, String cr, ' - Fecha hasta: ', self fechaHasta ddmmyyyy, String cr ). ! !!PaqueteTuristico methodsFor: 'propios' stamp: 'Joaco 5/3/2023 12:41'!calcularPrecio "retorna el costo de gestion del paquete." ^costoGestion ! !!PaqueteTuristico methodsFor: 'inicializacion' stamp: 'Joaco 5/3/2023 12:42'!initialize "inicializa la instancia PaqueteTuristico" nombre:='Paquete standard'. codigo:='AAA000'. costoGestion:=0.0. fechaDesde := Date today. fechaHasta := Date tomorrow.! !PaqueteTuristico subclass: #CircuitoNacional instanceVariableNames: 'costoPaquete enFechaEspecial porcentajeExtra' classVariableNames: '' package: 'TP1_94663Brondo_86505Serrat_94750Oliva'!!CircuitoNacional commentStamp: 'Joaco 4/22/2023 21:30' prior: 0!Descripci‚Äö√Ñ√∂‚àö‚Ć‚àö‚àÇ‚Äö√Ñ√∂‚àö¬¢‚Äö√Ѭ¢n:Entidad que describe un tipo de paquete espec‚Äö√Ñ√∂‚àö‚Ć‚àö‚àÇ‚Äö√Ñ√∂‚àö¬¢‚Äö√тĆfico. Esta entidad hereda todo el comportamiento y atributos dePaqueteTuristico. Comportamientos:‚Äö√†√∂‚àö√Ü‚Äö√†√∂‚àö¬∞‚Äö√Ñ√∂‚àö‚Ć‚àö¬¥ Inicializaci‚Äö√Ñ√∂‚àö‚Ć‚àö‚àÇ‚Äö√Ñ√∂‚àö¬¢‚Äö√Ѭ¢n‚Äö√†√∂‚àö√Ü‚Äö√†√∂‚àö¬∞‚Äö√Ñ√∂‚àö‚Ć‚àö¬¥ mensajes de acceso y modificaci‚Äö√Ñ√∂‚àö‚Ć‚àö‚àÇ‚Äö√Ñ√∂‚àö¬¢‚Äö√Ѭ¢n‚Äö√†√∂‚àö√Ü‚Äö√†√∂‚àö¬∞‚Äö√Ñ√∂‚àö‚Ć‚àö¬¥ calcularPrecio: valor final a pagar por uncircuito nacional seg‚Äö√Ñ√∂‚àö‚Ć‚àö‚àÇ‚Äö√Ñ√∂‚àö‚Ƭ¨¬•n las consideracionesindicadas anteriormente‚Äö√†√∂‚àö√Ü‚Äö√†√∂‚àö¬∞‚Äö√Ñ√∂‚àö‚Ć‚àö¬¥ asString: devuelve una cadena con los datos delcircuito, incluyendo su valor final en pesos. Instance Variables costoPaquete: <Object> enFechaEspecial: <Object> porcentajeExtra: <Object> Implementation Points!!CircuitoNacional methodsFor: 'inicializacion' stamp: 'Joaco 5/3/2023 12:50'!initialize "inicializa la instancia CircuitoNacional" super initialize. costoPaquete:=0.0. "costo del paquete segun servicios y dias programado" enFechaEspecial := false. "atributo logico que indica si el paquete corresponde a fechas especiales como feriados o fines de semanas turisticos. " porcentajeExtra := 0. "porcentaje extra que se adiciona en caso de que el circuito corresponda a fechas especiales."! !!CircuitoNacional methodsFor: 'propios' stamp: 'Joaco 5/3/2023 13:31'!calcularPrecio "valor final a pagar por un circuito nacional segun las consideraciones indicadas anteriormente" super calcularPrecio. enFechaEspecial ifTrue:[porcentajeExtra := 10]. " los paquetes para fines de semana largos tienen un 10% de incremento." ^(super calcularPrecio + costoPaquete + (costoPaquete * (porcentajeExtra / 100))) round:2 .! !!CircuitoNacional methodsFor: 'propios' stamp: 'Joaco 5/3/2023 12:51'!asString "devuelve una cadena con los datos del circuito, incluyendo su valor final en pesos." super asString initialize. ^super asString, (String cr, ' - Costo paquete: $', self costoPaquete asString, String cr, ' - Fecha especial?: ', self enFechaEspecial asString, String cr, ' - Precio final: $', self calcularPrecio asString). ! !!CircuitoNacional methodsFor: 'accessing' stamp: 'Joaco 5/1/2023 22:37'!porcentajeExtra: anObject porcentajeExtra := anObject.! !!CircuitoNacional methodsFor: 'accessing' stamp: 'Joaco 5/1/2023 15:07'!enFechaEspecial: anObject enFechaEspecial := anObject. "(anObject class = True) | (anObject class = False) ifTrue:[ enFechaEspecial := anObject]."! !!CircuitoNacional methodsFor: 'accessing' stamp: 'Joaco 4/22/2023 21:30'!porcentajeExtra ^ porcentajeExtra! !!CircuitoNacional methodsFor: 'accessing' stamp: 'Joaco 4/22/2023 21:30'!enFechaEspecial ^ enFechaEspecial! !!CircuitoNacional methodsFor: 'accessing' stamp: 'Joaco 5/1/2023 14:53'!costoPaquete: anObject anObject isFloat ifTrue:[costoPaquete := anObject]! !!CircuitoNacional methodsFor: 'accessing' stamp: 'Joaco 4/22/2023 21:30'!costoPaquete ^ costoPaquete! !PaqueteTuristico subclass: #PaqueteMedida instanceVariableNames: 'visa itinerario costoServicios costoTransporte costoExcusiones dias' classVariableNames: '' package: 'TP1_94663Brondo_86505Serrat_94750Oliva'!!PaqueteMedida commentStamp: 'Joaco 4/22/2023 21:51' prior: 0!Descripci‚Äö√Ñ√∂‚àö‚Ć‚àö‚àÇ‚Äö√Ñ√∂‚àö¬¢‚Äö√Ѭ¢n:Entidad que describe un paquete espec‚Äö√Ñ√∂‚àö‚Ć‚àö‚àÇ‚Äö√Ñ√∂‚àö¬¢‚Äö√тĆfico personalizado seg‚Äö√Ñ√∂‚àö‚Ć‚àö‚àÇ‚Äö√Ñ√∂‚àö‚Ƭ¨¬•n las preferencias del cliente.Comportamientos:‚Äö√†√∂‚àö√Ü‚Äö√†√∂‚àö¬∞‚Äö√Ñ√∂‚àö‚Ć‚àö¬¥ Inicializaci‚Äö√Ñ√∂‚àö‚Ć‚àö‚àÇ‚Äö√Ñ√∂‚àö¬¢‚Äö√Ѭ¢n‚Äö√†√∂‚àö√Ü‚Äö√†√∂‚àö¬∞‚Äö√Ñ√∂‚àö‚Ć‚àö¬¥ mensajes de acceso y modificaci‚Äö√Ñ√∂‚àö‚Ć‚àö‚àÇ‚Äö√Ñ√∂‚àö¬¢‚Äö√Ѭ¢n‚Äö√†√∂‚àö√Ü‚Äö√†√∂‚àö¬∞‚Äö√Ñ√∂‚àö‚Ć‚àö¬¥ asignarVisa: que permite agregar una visa alpaquete internacional .‚Äö√†√∂‚àö√Ü‚Äö√†√∂‚àö¬∞‚Äö√Ñ√∂‚àö‚Ć‚àö¬¥ calcularPrecio: valor final a pagar por uncircuito nacional seg‚Äö√Ñ√∂‚àö‚Ć‚àö‚àÇ‚Äö√Ñ√∂‚àö‚Ƭ¨¬•n las consideracionesindicadas anteriormente.‚Äö√†√∂‚àö√Ü‚Äö√†√∂‚àö¬∞‚Äö√Ñ√∂‚àö‚Ć‚àö¬¥ asString: devuelve una cadena con los datos delpaquete internacional, incluyendo el valor finaldel precio del paquete. Instance Variables costoExcusiones: <Object> costoServicios: <Object> costoTransporte: <Object> dias: <Object> itinerario: <Object> visa: <Object> Implementation Points!!PaqueteMedida methodsFor: 'inicializacion' stamp: 'Joaco 5/3/2023 12:56'!initialize "inicializa la instancia PaqueteMedida" super initialize. visa:= nil. "objeto que representa el permiso de entrada adicional segun el pais extranjero elegido por el cliente." itinerario:='Sin itinerario aun'. "cadena que describe el recorrido completo segun los lugares y servicios elegidos por el cliente. " costoServicios:=0.0. "suma de servicios elegidos " costoTransporte:=0.0. "coste de transporte por pasajero segun el tipo de transporte elegido" costoExcusiones:=0.0. "suma de excursiones elegidas" dias:=0. "dias de estadia en el pais extranjero"! !!PaqueteMedida methodsFor: 'propios' stamp: 'Joaco 5/3/2023 12:57'!asignarVisa: unaVisa "permite agregar una visa al paquete internacional ." (unaVisa isKindOf: Visa) ifTrue:[self visa: unaVisa] ifFalse: [ ^'La visa debe ser del tipo Visa!!' ].! !!PaqueteMedida methodsFor: 'propios' stamp: 'Joaco 5/3/2023 13:31'!calcularPrecio "valor final a pagar por un circuito nacional segun las consideraciones indicadas anteriormente." "se calculan como la suma de los montos de: servicios + transporte + excursiones, por la cantidad de dias definido por el cliente. Tener en cuenta que, si el pais elegido por el cliente requiere visa, esta le suma un costo unico adicional." |precioVisa|. precioVisa := 0.0. super calcularPrecio. visa isNotNil ifTrue:[ precioVisa := visa costoFinalVisa ]. "Si la visa existe, asignamos su costo final a la variable privada precioVisa" ^(super calcularPrecio + ((costoServicios + costoTransporte + costoExcusiones) * dias) + precioVisa) round:2.! !!PaqueteMedida methodsFor: 'propios' stamp: 'Joaco 5/3/2023 12:57'!asString "devuelve una cadena con los datos del paquete internacional, incluyendo el valor final del precio del paquete." super asString. ^super asString, (String cr, ' - Visa: ', self visa asString, String cr, ' - Itinerario: ', self itinerario asString, String cr, ' - Costo de servicios: $', self costoServicios asString, String cr, ' - Costo de transporte: $', self costoTransporte asString, String cr, ' - Costo de excursiones: $', self costoExcusiones asString, String cr, ' - Cantidad de dias: ', self dias asString, String cr, ' - Costo total: $', self calcularPrecio asString, String cr).! !!PaqueteMedida methodsFor: 'accessing' stamp: 'Joaco 5/3/2023 12:55'!visa: anObject (anObject isKindOf: Visa) ifTrue:[ visa := anObject ] ifFalse: [ ^'La visa debe ser del tipo Visa!!' ].! !!PaqueteMedida methodsFor: 'accessing' stamp: 'Joaco 4/22/2023 21:45'!itinerario ^ itinerario! !!PaqueteMedida methodsFor: 'accessing' stamp: 'Joaco 4/22/2023 21:45'!visa ^ visa! !!PaqueteMedida methodsFor: 'accessing' stamp: 'Joaco 4/22/2023 21:45'!costoServicios ^ costoServicios! !!PaqueteMedida methodsFor: 'accessing' stamp: 'Joaco 4/22/2023 21:45'!dias ^ dias! !!PaqueteMedida methodsFor: 'accessing' stamp: 'Joaco 4/22/2023 21:45'!costoTransporte ^ costoTransporte! !!PaqueteMedida methodsFor: 'accessing' stamp: 'Joaco 5/3/2023 12:53'!costoServicios: anObject (anObject isFloat) ifTrue: [costoServicios := anObject] ifFalse: [ ^'El costo debe ser un numero con decimales!!' ].! !!PaqueteMedida methodsFor: 'accessing' stamp: 'Joaco 5/3/2023 12:53'!costoExcusiones: anObject (anObject isFloat) ifTrue: [costoExcusiones := anObject] ifFalse: [ ^'El costo debe ser un numero con decimales!!' ] .! !!PaqueteMedida methodsFor: 'accessing' stamp: 'Joaco 5/3/2023 12:54'!itinerario: anObject (anObject isString) ifTrue: [ itinerario := anObject ] ifFalse: [ ^'El itinerario debe ser una cadena entre comillas simples!!' ].! !!PaqueteMedida methodsFor: 'accessing' stamp: 'Joaco 4/22/2023 21:45'!costoExcusiones ^ costoExcusiones! !!PaqueteMedida methodsFor: 'accessing' stamp: 'Joaco 5/3/2023 12:54'!dias: anObject (anObject isNumber) ifTrue: [dias := anObject] ifFalse: [ ^'Los dias deben ser un numero entero!!' ].! !!PaqueteMedida methodsFor: 'accessing' stamp: 'Joaco 5/3/2023 12:53'!costoTransporte: anObject (anObject isFloat) ifTrue: [ costoTransporte := anObject ] ifFalse: [ ^'El costo debe ser un numero con decimales!!' ].! !Object subclass: #Visa instanceVariableNames: 'tipo costo pais' classVariableNames: '' package: 'TP1_94663Brondo_86505Serrat_94750Oliva'!!Visa commentStamp: 'Joaco 4/22/2023 18:48' prior: 0!Descripci‚Äö√Ñ√∂‚àö‚Ć‚àö‚àÇ‚Äö√Ñ√∂‚àö¬¢‚Äö√Ѭ¢n:Entidad que representa un permiso de entrada en un pa‚Äö√Ñ√∂‚àö‚Ć‚àö‚àÇ‚Äö√Ñ√∂‚àö¬¢‚Äö√тĆs cuyo costo incrementa el valor final de los paquetesinternacionales ofrecidos por la agencia. Comportamientos: ‚Äö√†√∂‚àö√Ü‚Äö√†√∂‚àö¬∞‚Äö√Ñ√∂‚àö‚Ć‚àö¬¥ Inicializaci‚Äö√Ñ√∂‚àö‚Ć‚àö‚àÇ‚Äö√Ñ√∂‚àö¬¢‚Äö√Ѭ¢n ‚Äö√†√∂‚àö√Ü‚Äö√†√∂‚àö¬∞‚Äö√Ñ√∂‚àö‚Ć‚àö¬¥ mensajes de acceso y modificaci‚Äö√Ñ√∂‚àö‚Ć‚àö‚àÇ‚Äö√Ñ√∂‚àö¬¢‚Äö√Ѭ¢n ‚Äö√†√∂‚àö√Ü‚Äö√†√∂‚àö¬∞‚Äö√Ñ√∂‚àö‚Ć‚àö¬¥ costoFinalVisa: que devuelve el valor en pesos del costo final de la visa. Este valor depende del tipo: las de tipo 1 y 2 tienen un descuento del 5% por convenio de pa‚Äö√Ñ√∂‚àö‚Ć‚àö‚àÇ‚Äö√Ñ√∂‚àö¬¢‚Äö√тĆs acordados. Para el resto no se aplica este beneficio. ‚Äö√†√∂‚àö√Ü‚Äö√†√∂‚àö¬∞‚Äö√Ñ√∂‚àö‚Ć‚àö¬¥ asString: que devuelve una cadena con la descripci‚Äö√Ñ√∂‚àö‚Ć‚àö‚àÇ‚Äö√Ñ√∂‚àö¬¢‚Äö√Ѭ¢n completa de la visa. Instance Variables costo: <Object> pais: <Object> tipo: <Object> Implementation Points!!Visa methodsFor: 'initialization' stamp: 'Joaco 5/3/2023 11:38'!initialize "inicializa la instancia Visa" costo:=0.0. pais:='Argentina'. tipo:=0.! !!Visa methodsFor: 'converting' stamp: 'Joaco 5/3/2023 12:27'!asString "Devuelve la Visa en forma de cadena" ^(' - Tipo de visa: ', self tipo asString, ' - Pais: ', self pais asString, ' - Costo: $', self costoFinalVisa asString).! !!Visa methodsFor: 'accessing' stamp: 'Joaco 4/22/2023 18:48'!costo ^ costo! !!Visa methodsFor: 'accessing' stamp: 'Joaco 5/1/2023 23:19'!costo: anObject anObject isFloat ifTrue:[costo := anObject]. anObject isNumber ifTrue:[ costo := anObject asFloat ].! !!Visa methodsFor: 'accessing' stamp: 'Joaco 5/3/2023 12:33'!tipo: anObject anObject isNumber ifTrue:[ anObject >0 ifTrue:[tipo := anObject] ifFalse: [ ^'El numero ingresado debe ser mayor a cero' ] ] ifFalse: [ ^'El valor ingresado debe ser un numero entero!!' ]. ! !!Visa methodsFor: 'accessing' stamp: 'Joaco 4/22/2023 18:48'!pais ^ pais! !!Visa methodsFor: 'accessing' stamp: 'Joaco 5/3/2023 12:31'!pais: anObject anObject isString ifTrue:[pais := anObject] ifFalse: [ ^'El pais ingresado debe estar entre comillas simples!!' ].! !!Visa methodsFor: 'accessing' stamp: 'Joaco 4/22/2023 18:48'!tipo ^ tipo! !!Visa methodsFor: 'propios' stamp: 'Joaco 5/3/2023 12:34'!costoFinalVisa "devuelve el valor en pesos del costo final de la visa. Este valor depende del tipo: las de tipo 1 y 2 tienen un descuento del 5% por convenio de pa‚Äö√Ñ√∂‚àö‚Ć‚àö‚àÇ‚Äö√Ñ√∂‚àö¬¢‚Äö√тĆs acordados. Para el resto no se aplica este beneficio." |res| res:=0. tipo <3 ifTrue:[res:=5]. ^costo - (costo * (res / 100)).! !