You are on page 1of 87

CONTENIDO

CONCEPTUALIZACION 1.LACLASE 2.LOSATRIBUTOS 3.LOSMTODOS 3.1Parmetros: 3.2TiposdeParmetros: 4.Encapsulado LAIMPLEMENTACIONDELOSMTODOSYLAINSTANCIASDELASCLASES ASIGNACIN: AsignacinDirecta: AsignacinIndirecta: 2.ESTRUCTURASCONDICIONALES: 3.INSTANCIANDOCLASES CICLOSYARREGLOS 1.CICLOFOR 2.CICLOWHILE 3.ARREGLOS 58

3 3 8 11 13 14 14 23 23 23 23 26 44 54 54 55

INTRODUCCION

En el mbito de la ingeniera de sistemas, la programacin es una herramienta primordial, debido a esto es indispensable que el estudiante de ingeniera tengaslidas bases depensamientolgico computacional que le permita en futuros cursos desempearse eficientemente, para ello tiene que comprender la forma como se resuelven problemas reales a travs de la aplicacin de los objetos. Adems comprender todos los datos y operaciones implcitas y explicitas quese planteanen un problema yque son necesariospara susolucin. En este curso se llevar a la prctica los conceptos tericos fundamentales de programacin utilizando como herramienta un lenguaje de programacin como Java y la tcnica de programacin orientada aobjetos. El estudiante afianzando los conocimientosdela lgica computacional debido a que realizar programas en el computadoriniciandoelciclodecursosdedesarrollodesoftware.

CAPITULOI

CONCEPTUALIZACION

La programacin orientada a objetos es una tcnica que permite

optimizar los recursos usados en el desarrollo de un software, que satisface una necesidad, utilizando en el modelamiento de los problemas una herramienta de diseo llamadas clases, haciendo nfasis en el problema en general para resolverlo de manera particularparaunamejoreficienciaymantenimientofuturo. Hay que resaltarquela basedeestaprogramacineselproceso de diseo, que permite modelar la posible solucin antes de escribir la primera lnea de cdigo que lo empiece a resolver. Enel transcurso de este libro trataremos de enfocarnos en el concepto de diseo, dejando algunos temas del lenguaje para que el lector los estudie a satisfaccinynodesenfocarnosdelobjetivoquenosconcierne.

1.LACLASE

Es un ente que se usa para modelar un problema de la realidad, caracterizado por unos atributos (propiedades) y unos mtodos (acciones)quelepermitenresolverdichoproblema. Es debido anotar que es el problema quien genera la clase y no lo contrario, dado que de las particularidades del problema y de su contexto mismoesde dondese abstraenlas propiedades(atributos) y mtodos (acciones) de la clase. Donde los atributos son las caractersticas propias del problema (datos necesarios) y los mtodos sonlasaccionesque debeejecutarlaclasepararesolverel problema(manipulandolosdatosconlasoperacionesnecesarias). Asporejemplo: Se quiere disear una clase que permita calcular el rea y el permetrodeunrectngulo. Recordemosque el rea esigual alabaseporalturayelPermetro esiguala2veceslabasemas2veceslaaltura.

Altura Base

Caracterizamos los atributos ylos mtodos identificandocadaunode ellosconunnombre. Atributos: Para el problema son necesarios dos: Los llamaremos Base y Altura que son los datos bsicos y suficientes para realizar los clculos. Tenemosqueparacalcularelrea: Es necesario un mtodo que se encargue de hacer la operacin (multiplicacin)BaseporAlturaylollamaremosCalcularrea. ParacalcularelPermetro: Se debecrear un mtodo que se encarguedehacerlaoperacin:2 veces la Base ms 2 veces la altura, a este mtodo lo llamaremos Calcularpermetro. Para podertener lainformacincorrespondientealosvaloresque se guardan el los atributos es necesario pedirla, para ello creamos un mtodo llamado pedirdatos y para mostrar el resultado de las operaciones que realiza la clase creamos el mtodo mostrarresultados Podemos observar que los datos que se pueden calcular (rea, Permetro) no se convierten en atributos sino en mtodos, adems quelos atributos correspondientesa la clase no pueden sermsque los datosbsicos requeridos para resolverel problema,enestecaso los datosnecesariosson losdelos lados,y comoelrectngulotiene 2 lados iguales (Base) y otros dos lados iguales (altura) podemos disearlaclasedelasiguientemanera: Nota: Al asignarle un nombrea un atributoo aun mtodorecuerdenodejar espacios entre los caracteres de dicho nombre. Los mtodos se diferenciaporquepresentan(),alfinaldelnombre.

ClaseRectngulo

Base Altura Pedir_datos() calcular_area() calcular_perimetro() mostrar_resultados() Plantearemosotroproblemaparaaclararunpocoms. Se quiere calcular el sueldo a pagar de un empleado, setienepara ellolashorastrabajadasyelvalordelahora. Hayquetenerencuenta los descuentos ocasionadosporelsegurosocialyporlaretencinen la fuente, calculados a partir del bsico ganado, adems hay que determinarsirecibesubsidioono. Solucin: Nmerodehoras:GeneraunatributoquellamaremosNumHoras. Valordelahora:GeneraunatributoquellamaremosValHoras. Estos son los datos que el problema nos ofrece y que utilizaremos parapoderdisearlayqueutilizaremosenlosmtodos. Lasoperacionesarealizar: Bsico: Genera un mtodo para calcular nmero de horas por Valor delahora,LollamaremosBsico. Descuento seguro social: Genera un mtodo para calcular un descuentoapartirdelvalordelbsico.LollamaremosDescuentoIss. Descuentoporretencinenlafuente:Generaunmtodoparacalcular otro descuento que se hace sobre el rango del valor del bsico. Lo llamaremosDescuentoRetencion. Subsidio: Genera mtodo que evala el valor del bsicoy determina si recibe subsidio para asignarle el valor correspondiente sino asignaracero.LollamaremosSubsidio. Total a pagar: Este concepto es implcito al problema y genera un

mtodo que se usar para calcular el pago final a partir del valor bsicorestndolelosdosdescuentos.LollamaremosNeto. Observacin: Volvemos a resaltar, los valores que se pueden calcular no son atributos (tengaeso encuenta) sinoquesepueden considerarcomo mtodos. Observemos quealgunosmtodosnecesitan utilizarnolos atributos sino otros mtodos para poder realizar sus operaciones como es el caso de descuentoIss que necesita del mtodo bsico para poder calcular su propio valor, de igual manera el mtodo neto necesita de los otros para efectuar la operacin. (Esto es una caracterstica del diseodeclases).Ademsdiseamoslosmtodos depedirdatosymostrardatos. Ntese que aunque podramos haber diseado un solo mtodo (Neto)parahacertodoslosclculoscorrespondientes,nolohacemos con el fin de acogernos a una regla que ms adelante explicaremos (Encapsulado). Veamoseldiseodelaclase: ClaseTrabajador Valhoras Numhoras Pedirdatos() Basico() Descuentoiss() Descuentoretencion() Subsidio() Neto() Mostrarresultados() Nota: Los problemas cmo tales tienen unas propiedades que seran las causasdel,losatributos. Los mtodos, que son acciones del problema, se modelan de tal

formaquesepiensaenelloscomoloquesehaceconlosatributos. EjerciciosResueltos A continuacin se plantean 3 problemas y se disea la solucin de ellos,hagaunanlisisdecadasolucin. 1.Disee unaclase quepermitaconocerelresultadodeunaeleccin dealcaldepuestoqueelresultadoeselsiguiente: El candidato A tiene el 35% de los votosvalidos, elcandidatoBtiene el 12% de los votos validos y el candidato C tiene el 42% de votos validos. Los votos en blanco corresponden al resto de los votos validos.LosvotostotalessonXyel78%deestosvotossonvalidos. ClaseVotacin Votos Pedirdatos() Calcularvotosvalidos() calcularvotoscanA() calcularvotoscanB() calcularvotoscanC() calcularvotosblanco() mostrarresultados() 2. Disear una clase que permita calcular el total de estudiantes de un colegio teniendo en cuenta que el colegio tiene 6 salones los cualessedistribuyendelasiguientemanera. El grado primero tiene Xestudiantes, el gradosegundotiene1/3que el grado primero, el grado tercero esdos veces elgrado 2, el grado cuartotiene Yestudiantes,elquitogradotienedecuartogradomas eltotaldesegundo,6tiene1/8delapoblacinestudiantilanterior. ClaseColegio E_1 E_4 pedir_datos() calcular_Est_2()

calcular_Est_3() calcular_Est_5() calcular_Est_6() calcular_Total_Est() mostrar_Resultados( ) 3. Dados A, B, C y D que corresponden a medidas de trozos de madera disee una clase que determine si se puede construir una mesade:2patas,3patasy4patas. ClaseMesa A,B,C,D pedir_datos() calcular_mesa_2() calcular_mesa_3() calcular_mesa_4() mostrar_Resultados( )

2.LOSATRIBUTOS

Pueden contener datos que toman valores diferentes, los cuales pertenecen a un conjunto o rango determinado que asuvez pueden ser datos discretos o continuos de una naturaleza especfica, dependiendodellenguajedeprogramacinconelquesetrabaja.

Dado que un atributo posee un dato de un tipo determinado, es necesario diferenciar entre el identificador del atributo y elcontenido quealbergar,veamos: CrearemosunatributoSueldoyledaremosunvalorde1500 Identificador sueldo1500ContenidoActual | Observemos que el identificador (Sueldo) hace referencia a unvalor dado (1500) que es el contenido que en este momento le fue asignado, tengamosen cuenta quepodemos asignarle otrovalor(en Sueldoguardeahoraelvalorde300). Identificador Sueldo300ContenidoActual

Esto caracteriza elcontenidocomoel valorcambiantequedepende de las operaciones que se hagan enel,pero elidentificador quese le asigno no cambia nunca. Para poder accesar al contenido del atributo hay quehacerreferenciaasuidentificador.Elconceptodees asociadoenprogramacinestructuradaconelconceptodevariable. Hay que tener en cuenta al momento de darle un identificador (nombre) a un atributo es recomendable relacionarlo con el conceptoquequeremosreferenciar(mnemotcnica). Como regla general no es permitido mezclar los tipos de datos, es decir, un atributo puede manejar solo un tipo de dato a la vez, tomando valores que no deben violar el rango o dominio que se defineparadichotipodedato. Entrminosgeneralesexistentrestipos: Numricos

Alfanumricos(todotipodecarcter). Ybooleanos(valoreslgicos0y1True,False). Otra caracterstica de los tipos dedatosquepodemosmencionares que tienen definida una serie de operaciones, es decir, tienen definidolo que podemos hacercon ellosoperaciones que requieren el uso de operadores. Finalmente cabe anotar que el usuario (programador) puede definir sus propios datos a partir de los datos primitivos definidos por el lenguaje de programacin (Tema que abordaremosmasadelante). Tiposdedatoselementalesenjava TiposNumricos (sinvaloresdecimales) Palabra RangodeValores reservada Byte Desde128hasta127 Short Desde32768hasta32767 Int Desde 2147483648 hasta 2147483647 Long Desde 9.223.372.036.854.775.808 a 9.223.372.036.854.775.807 TiposdeDatosCarcter Palabra RangodeValores reservada String cadena de caracteres segn usuario TiposdedatosLgicos Palabra RangodeValores reservada Boolean ValorlgicoTrueoFalse Aplicando el concepto de tiposdedatos,sobre losatributosaldefinir

stos se le debeindicarsudominio, esdecir,eltipodedatoquevaa manipular. TipodeDatoIdentificador Ejemplo: Stringnombres IntSueldo Observaciones generales sobre los identificadores de los atributosencualquierlenguaje:

Nodebencomenzarconnmeros No deben ser palabras reservadas del lenguaje de programacin. Nodebencontenerespacios Porcuestionesprcticasdebenserclarosynotanlargos. Deben ser mnemotcnicos o sea deben caracterizar al dato quemanipularan.

Podramos enunciar otraspero dejaremos quelaexperiencia y laprcticaconloscompiladoreslesenseems.

Comenzaremos ahora un estudio de los mtodos CaracterizacinenJava.

y su

3.LOSMTODOS

Son acciones que le dan la funcionalidad a la clase, y como tal definen el comportamiento que stos exhiben al momento de ser activados (usados). De este modo cada mtodo debe realizar una tarea especficadeacuerdoalproblemaquesequieresolucionarcon laclaseenmencin. Enunaclasepodemosdefinircuatrotiposdemtodos:

a.

Constructores:

Estos mtodos constituyen operaciones de inicializacin de valores para los atributos, como tambin la inicializacin de las estructuras internas de las clases (direccionamiento de memoria), por ende deben ser los primeros en ser activados al momento de utilizar la clase. Sintaxis: Palabrareservada:Nombreclase() Ejemplo:personas() En Java los constructores tiene el mismo nombre de la clase y una clase puede tener varios constructores cambiando solamente los parmetrosqueselepasan.
b.

Destructores:

Estos tienen como funcionalidad liberar los recursos de memoria utilizados por la clase para su trabajo. Su activacin implica que el objeto no podr ser usado para tareas posteriores en el mbito del programaqueesthaciendousodel. Sintaxis: Palabrareservada:finalize() ejemplo:protectedvoidfinalize() Otras caractersticas de los destructores en el lenguaje javaesque noesnecesariodeclararlos. Procedimientos: Estos mtodos se caracterizan por la ejecucin de una o ms acciones (operaciones) sobreunos datosovaloresquetienenuntipo (dominio) determinado y que se obtienen en algunos casos leyndose de los atributos, tomndose a partir de parmetros

(concepto que definiremos ms adelante) o utilizando otrosmtodos delaclase. Sintaxis: Palabrareservada:VoidIdenfificador ejemplo:voidPedirdatos()

d.

Funciones:

Al igual que los procedimientos, una funcin constituye un mtodo querealizaoperaciones sobredatos de untipoespecficodatosque son ledos desde los atributos, otros mtodos de la clase y/o pasados por parmetros, pero que a diferencia de los procedimientos, las operaciones efectuadas sobre dichos datos devuelvenuno ysolounvalor quepor supuesto tiene untipodefinido yelcualcaracterizaeltipodelafuncin. Sintaxis: Palabrareservada:TipodedatoIdentificador Ejemplo:intcalculararea() Ahoraprocederemosacomplementarlosconceptosanterioresconla definicindeparmetros.

3.1Parmetros:

Para que los mtodos puedan ejecutarse debern tomar valores ya seaalaclasemismaoaelementosexternos. Cuandounmtodo necesitavaloresquesonexternosyestosvalores pueden variar al momento de ser manipulados en los procesos mismosdelmtodo,estosvaloresrecibenelnombredeparmetros. Observemos el siguiente ejemplo que corresponde a una funcin matemtica:

f(x)=3x+10 Podemos observar que x es un valor que no hemos definido, pero que se hace necesario al momento de calcular lafuncin, es decir,f es el identificador del mtodo y x es el valor que f necesita para poderrealizarlaoperacin(parmetro). Ahora bien si le asignamos algunos valores a x (parmetro) de f, tenemosque: f(3)=3*3+10 f(5)=3*5+10 f(10)=3*10+10 De stamaneravemosquelaestructuradelmtodonovaralonico quevaraeselvalordex(parmetro)paracalcularlafuncin. Los valores (3,5,10) asignados en el ejemplo son remplazados en la referenciaqueenlafuncintienex. Observacin: Cada vez que necesitamos valores cambiantes en un mtodo y no conocemos su contenido, debemos hacerla referencia en elmtodo conunparmetro.

3.2TiposdeParmetros:

Dependiendo que los parmetros retornen un valor o no al ser manipuladosenunmtodo,seclasificanen:


a.

Parmetrosporvalor:

Cuando el parmetro es utilizadosolamente para introducirvaloresal mtodoqueloprocesa.


b.

Parmetrosporreferencia:

Cuando el parmetro al ser asignada al mtodo puede cambiar o modificar su valor durante su utilizacin en el mtodo, manteniendo

esos cambios de all en adelante para dara conocer dicho cambioa los demsmiembrosdelaclase,quienespuedenutilizarloymodificar denuevodichovalor. Para ver cmo trabajan conjuntamente los atributos y los mtodos, debemoscomprenderprimeramenteelconceptodeencapsulado.

4.Encapsulado

El encapsulamiento define dos reglas, Una aplicada sobre los atributos queestablecequeparaaccederaellos(asignarlesvaloreso leerlos mismos), se deben definirmtodosespecializadosendichas operaciones de tal manera que los atributos son manejados por mediodelaactivacindedichosmtodos. La Otra regla est referida sobre los mtodos, determinando sobre stos uncriteriodeunicidad funcional,es decir, que un mtododebe encargarse de realizar una tarea (proceso)nica Deestaforma una clasedefinetantosmtodoscomotareasdebaefectuar. Como notamos en el encapsulado la esencia de proteger los datos con la utilizacin de mtodos implica diferenciar diversas secciones dentrodeunaclase: Seccin Privadas: En esta seccin se declaran los atributos y mtodos quesolo puedenseraccedidaporlosmtodosdelamisma clase,losdescendientesnotienenaccesoaellos. Seccin Protegida: Aqu se declaran los atributos y mtodos de la clase que pueden ser accedidos por sus propios mtodos y porlos mtodosdesusdescendientes. Seccin Pblica: Se declaran los mtodos que la clase a poner a disposicindequienlonecesite. clase Seccin

Privada Atributos, Mtodos Seccin Protegida Atributos, Mtodos Seccin Publica Mtodos Sintaxis ClassIdentificador {private TipodedatoIdentificadordeAtributos public Tipo dato Identificador del metodo() mtodo} }

{implementacin del

Ahora retomaremos los ejercicios planteados al principio y veremos su respectiva solucin aplicando todos los conceptos estudiados hasta este momento, la parte de implementacin de los mtodos la abordamos mas adelante en este capitulo,por ahoranos enfocamos en el diseo de laclase. Pararespetar la aplicacindel encapsulado los mtodos de pedir informacin y mostrar informacin se disean enlaseccinpblica. Primerejemplo,hallarelreayelpermetrodeuncuadrado. Classrectangulo {private intbase,altura public rectangulo(){implementacin} voidpedirdatos(intvalbaseintvalaltura){implementacin} voidMostrarResultados(){implementacin}

intObtenerbase(){implementacin} intObteneraltura(){implementacin} intCalculararea() {implementacin} intCalcularperimetro(){implementacin} } Explicacin: En la estructura definida en la clase notamos varios aspectos de importancia: Existen dos atributos (base, altura) que como se defini deben poseer un dominio (tipo de dato) que para el caso es int, la razn paraelloesquedebenservaloresenteros. Losdos atributos se encuentran enlaseccinprivadaatendiendoa la regla del encapsulamiento que nos dice que debemos proteger todoslosatributos. Enlaseccinpblicatenemosque:

Trabajamos con un constructor al cual le llamamos como la clase rectangulo ,Se disean tresmtodosparaaccederalosatributos : Para llevar informacin a los atributos diseamos el mtodo pedirdatos el cual utilizan dos parmetro un valbase y el otro valalturalos cuales vandentrode losparntesisdelmtodo ydos para traer informacin de los atributos que son Obtenerbase y Obteneraltura. Seguidamente se disean los mtodos que han de ser las acciones para lo cual se ha diseado la clase, siendo stos Calculararea y Calcularperimetro, adems un mtodo para mostrarresultados. Cabe anotar hacer referencia en la sintaxis del lenguaje java definicin de los mtodos en java implica la implementacin del cdigo de los mismo dentro de la clase, algo que omitimos ahora peromasadelanteatenderemos..

Nota: por sintaxis es recomendable en JAVA escribir todo el cdigo en minsculas ya que el compilador diferencia entre maysculas minsculas y nos puede ocasionar un mal rato.

Cuando este escribiendo cdigo olvdese de escribir alguna tilde. Trataremos ahora el segundo ejemplo planteado al comienzo del capitulo. Se quiere calcular el sueldo a pagar de un empleado, setienepara ellolashorastrabajadasyelvalordelahora. Hayquetenerencuenta los descuentos ocasionadosporelsegurosocialyporlaretencinen la fuente, calculados a partir del bsico ganado, adems hay que determinarsirecibesubsidioono. classtrabajador {private: intnumerohoras floatvalorhora public trabajador(){} voidasignarnhoras(intvalhoras){} voidasignarvalor(floatvalvalor){} intobtenernhoras(){} floatobtenervalor(){} floatBasico(){} floatdescuentoiss(){} floatdescuentoretencion(){} floatSubsidio(){} floatNeto(){} } Explicacin: En este ejemplo utilizamos 2 atributos con dominio distinto, numerohoras de tipoenteroy valorhora de tiporeal,estoconelfinde especificarelvalorquepuedecontenercadaatributo. Observe la sintaxis de los mtodos, adems tenga en cuenta que para los mtodos asignarnhorasy asignarvalorseusan parmetros, esto debido aque se hacenecesarioqueestosmtodosinteracten con el medio, para poder adquirir un valor exterior, los parmetros utilizados en dichos mtodos son del mismo dominio del atributo ya que ellos lo que harn ser guardar los valores que tomen en los

atributos. Analiceporquenodiseamosunsolomtodo(pedirdatos)? Ntese que para cada accin de la clase, (tarea a realizar), hemos diseado un mtodo especfico con el fin de mantener el encapsuladoypoderorganizareldiseo. Bien ahora planteremos algunos ejemplos y disearemos su solucin, pero la explicacin y entendimiento corre por cuenta del lector. Ejemplo3. El almacn vende ms desea en su aniversario haceruna promocin en su variedad de productos, para ello los ha clasificado en 3 categorasdelasiguientemanera: Categora 1 : para los dispositivosde almacenamiento(discosduros, cintas,tapebackupetc..). Categora 2 : para los perifricos (impresoras, scanners, josticks etc..). Categora3:paraloscomputadorescompletos. El almacn propone a sus compradores que lleven una cantidad de productos deuna solacategorahacerlossiguientesdescuentos5% para artculosde categora 1, 8%paraartculosdecategora2y12% paraartculosdecategora3. Disee unaclase que permitaalalmacnsabercuantodebepagarun compradorquellevasolamenteartculosdelmismotipo. Observacin: Tenga en cuenta los valoresqueledanenelproblemaylasacciones quedebenhacerparalograrelresultado. classalmacen{ Private intCantidad intValor

stringTipo public: almacen(){} voidAsignarcantidad(intvalcant){} voidAsignarValor(intvalvalor){} voidAsignatipo(stringvaltipo){} intObtenercantidad(){} intObtenerValor(){} stringObtenertipo(){} intDescuento(){} intValorneto(){} intTotalaPagar(){} } Observaciones: Elmtodovalornetocalcularaelvalorrealdelosartculos. El mtodo descuento evaluaraeltipo de losarticulo quesecompray calculaelvalordeldescuentoutilizandoelvalorneto. Elmtodototalapagarcalculaelvalorqueelusuariopagarealmente. Ejemplo4. Un estudiante de informtica desea controlar las notas de su asignatura de programacin, el profesor va a hacer 3 evaluaciones dndoleunporcentajeacadanotadelasiguientemanera: Primeraevaluacin30% Segundaevaluacin28% terceraevaluacin42% El profesor plantea que para aprobar la asignatura se debe tener un promedio de 3.5, elestudiantedesea saberen queevaluacin le fue malparareforzarlostemasevaluados. classtestudiante { private

floatprimeranota floatsegundanota floatterceranota Public testudiante(){implementacion} voidAsignarNota1(floatvalnota1){implementacion} voidAsignarNota2(floatvalnota2){implementacion} voidAsignarNota3(floatvalnota3){implementacion} floatobtenernota1(){implementacion} floatobtenernota2(){implementacion} floatobtenernota3(){implementacion} floatcalculapromedio(){implementacion} boolevaluaaprobacion(){implementacion} stringnotamenor(){implementacion} } Observaciones La funcin calculapromedio se encarga de tomar cada nota y multiplicarlaporsuporcentajeparaluegosumarlaslastres. La funcin evaluaaprobacion que devuelve un valor lgico determina siaprobonolaasignatura. La funcin notamenor evala cual de las tres notas fue la menor devolviendoelnmerodelanotaynosuvalor.

Practica Para las clases votacion, colegio y mesa, escriba los diseos aplicandolosconceptosvistosylasintaxisdejava. Hasta el momento nos hemos detenido en el procesodediseode clases porque es la etapa ms importante dentro del desarrollo de unaaplicacinconunenfoqueorientadoaobjeto. Ha podido observar que solamente con el diseo de la clase se entiendelasolucindelproblemaymasansepuedesaberparaque estahechadichaclasesinleerelproblemacomotal.

Las recomendaciones ms importantes que se hacen entorno a la programacinOrientadaaObjetossonlassiguientes Dedquele buen tiempo a entender el problema , esto quiere decir analice todos los factores que se involucran dentro del problema planteado. No se apresure recuerde la celebre frase de Napolen Vstanmedespacioqueestoydeprisa. Analizado el problema proceda a identificar atributos y mtodos ( recuerdequesiundatosepuedecalcularnoesunatributo). Diseesuclase. Diseado la clase hgase la siguientepregunta. Satisface laclase todas lasnecesidades planteadas enel problema? Si su repuestaes SI felicidades halogradodisearunaclase!YsisurespuestaesNO, no se preocupe redisee su clasetotaltodava no ha perdidotiempo escribiendoelcdigodeimplementacindelosmtodos. . Nunca se leolvide lasreglasdeencapsuladocmplalasycomenzar a trabajar con una de las tcnicas de programacin mejor implementadashoyenda. Recuerde que hasta ahora estamos en diseo una las etapas de la programacinorientadaaobjetos.

Taller
1. 2. 3.

QueesunClase? Que importancia tiene el encapsulado en la Programacin OrientadaaObjetos? Cul es la etapa ms importante en la Programacin Orientada a Objetos?

Queesunaclase?. 5. Caractericelasintaxisdejavaencuantoadefinicindeatributos. 6. Diferencieentreidentificadordeunatributoysucontenido. 7. Hagaunbreveresumendelasintaxisdejavaenlostiposdedatos. 8. Quesonlosmtodos? 9. Determinelaimportanciadelosconstructoresydestructores? 10.Paraquesirvenlosparmetros? 11.Todoslosmtodostienenparmetros?


4.

Diseelasclasespararesolverlossiguientesproblemas:
1. 2.

Sedeseacalcularelreayelpermetrodeuncrculo. La empresa Cmputos S.A. desea controlar el inventario de los computadores que venden para as mantener en tiempo real informacin correspondiente a: tipo de computador, cantidad existente, cantidad mnima que debe haber yel valor decadauno. Adems se desea saber el costo total de los computadores existentes. Sedeseasabercualeselmayordetresnmerosdados.

3.

CAPITULOII

LAIMPLEMENTACIONDELOSMTODOSYLA INSTANCIASDELASCLASES

Cuando se disean las clases y especifican los mtodos se sabe cuales son las acciones que puede cumplir dicha clase. Bien ahora

profundizaremosencmo esos mtodossoncapacesderesolversu propia tarea usando el cdigo necesario para que trabaje adecuadamente. Recuerde que cada mtodo en su diseo ya tiene proyectada una tareaacumplir.

ASIGNACIN:

Cuando hay que guardar un valor en algn atributo o hacer operaciones con datos y sabersus resultados es necesario asignar dichovalor. La asignacin consiste en guardar valores en los datos, estos se puedendevariasmaneras:

AsignacinDirecta:

Consiste en guardarel valordemaneraquenodependasinodeldato mismo. Ejemplo:Guardemos5enelatributoNmero. Numero=5

AsignacinIndirecta:

Ocurre cuando el valor deundatodependedelaoperacin de otros datosqueinteractan. Ejemplo: En aguarde laoperacin de x+ y ,entonces a dependede losvaloresquetomenx,y. a=x+y Nota: Cuandousamos losparmetrosasignamosalatributoodatoalcualle queremos pasar dicho valor, elidentificador del parmetroestoesen tiempo diseo luego cuando se corre el programa se asigna el valor queelusuariolepaseporelparmetro. Regla:

Para asignar un valor se debe ubicar el identificador del dato enel que queremos guardar al lado izquierdo y los valores de los datos quesequierenguardaralladoderecho. Sintaxis can=3 num=10 nombre=JuanPrez suma=num+can COMOIMPLEMENTARLOSMTODOS Dadas las caractersticas del primer ejemplo que calcula el rea yel permetro de un rectngulo (este ejemplo utiliza solo asignaciones para resolver su problema) lo utilizaremos para aplicar la implementacindelosmtodos. Para efectuar operaciones cuando asignamos valores tengamos en cuenta los operadores aritmticos que los lenguajesnos presentan, vercuadro Operacin Resta Suma Divisin Multiplicar Smbol o + / * Ejemplo x=53 a=a+b z=3/9 rea = base *altura

classrectangulo Private intbase,altura Public rectangulo(){

base=0 altura=0 } voidasignarbase(intvalbase){ base=valvase } voidasignaraltura(intvalaltura){ altura=valaltura } intobtenerbase(){ returnbase } intobteneraltura(){ returnaltura } intcalculararea(){ intarea area=Obtenerbase()*Obteneraltura() returnarea } intcalcularperimetro(){ intpermetro permetro=(Obtenerbase()*2)+(Obteneraltura()*2) returnpermetro }

ANALISIS: 1. Todos los mtodos deben comenzar con el tipo de dato que devuelven seguido del nombre del mtodo, entre parntesis la lista de parmetros ,si loshay , teniendoencuentaqueenladeclaracin de los parmetros va primero el tipo de dato y luego el identificador del mismo. Si el mtodo no devuelve ningn valor se usalapalabra reservadaVoidqueindicaqueelmtodoesunprocedimiento. Ejemplo:

VoidAsignarbase(intvalbase). Si elmtodo devuelvealgnvalor,entoncesesunafuncin,paraesto seutilizaeltipodedatoyelidentificadordelmtodo. Ejemplo: IntTrectanguloObtenerbase(). Lapalabra(returndatoindicaelvalorqueelmtododebedevolver). 2.Todoslos mtodoscontienenunsegmentoprincipalquecomienza con { y terminaen }, dentro delcualseescribenlasinstrucciones quehandeejecutardichomtodo. En algunoscasos es necesariodeclararvariables(datos)localesaun mtodo. Una variable local es aquella que existe solo dentro del mtodo en que se declara, es decir, solo puede ser usada entre el inicio y finalizacin de dicho mtodo, especficamente entre los smbolos de llave de apertura ({) yllavede cierre (}) delcuerpodel mtodo. El uso de variables locales permite simplificar operaciones para que las instrucciones de una implementacin sean menos complejas y consecuentemente ms entendibles. Como ejemplo podemos mencionar el caso de la variable local : int rea en la implementacin de la funcin Calculararea, asla variable rea recibe el valor calculado para el rea (obtenerbase() * obteneraltura()) y posteriormentelafuncinCalculararea devuelvedichovalormediante lainstruccinreturnarea. 3.Elconstructorpuedeaccederdirectamentealosatributos. 4. Los mtodos de asignacin para los atributos utilizan el identificadordelparmetroparaasignarlesuvaloradichoatributo. Ejemplo:Elmtodoqueledaunvaloralaaltura: Void Asignaraltura(int valatura), utiliza la siguiente sentencia de asignacinensuimplementacin:altura=valaltura.

2.ESTRUCTURASCONDICIONALES:

En la implementacin de los mtodos se escriben una serie de instrucciones que son las que le dan operatividad, es decir, determinanenunaformaorganizada,detallada,precisaylgicaloque cada mtododebehacer,por lo tanto de acuerdo acadamtodoas debesercuerpodeinstrucciones. Hastaahora hemos visto queestasinstruccionespueden consistiren la declaracin de variables, en el llamado o activacin de mtodos dentro de otros,enla asignacin de undatoa unavariable,atributo o funcin y tambin hemos trabajado con operaciones de calculo matemtico. Todas estas instrucciones tratadas hasta el momento se ejecutan en forma secuencial una por una y en orden explcito. Sin embargo muchos casos de implementacin nos plantean el rompimiento de esta secuencialidad de tal manera que podamos ejecutar o no ciertas instrucciones de acuerdo a unas condiciones determinadas pudiendo astomar decisiones dentrodelaimplementacin dealgn mtododenuestrasclases. A estas instrucciones que nos permiten evaluar condiciones para tomardecisionesselesdenominaEstructurasCondicionales. Una estructura condicional requiere de unaexpresinocondicinque al ser evaluada arrojar un nico valor de verdad que puede se verdadero(true)ofalso(false). Si la expresin se evala como verdadero se ejecutarn las instrucciones que creamos necesarias para dicho caso, de lo contrario esas mismas instrucciones sern ignoradas. Sin embargo siendo la condicin falsa, tambin podemos establecer la ejecucin de otro bloque de instrucciones que alternativamente necesitemos ejecutar en el caso de que la expresin del condicional no sea verdadera. Por ejemplo una frase como esta es una instruccin condicional: Si maana llueve,entoncesme quedaren casa.En ellavemos que la expresin a evaluar es si maana llueve y la accin a ejecutar si dichacondicinesciertasermequedarencasa. Sin embargo podemos hacer algo en caso de que la condicin sea

falsa, por ejemplo: Si maanallueve entonces mequedar encasa, sino ir a clases. Aqu podemos apreciar que se incluye una nueva parte en el condicional (sino) que indica que se va expresar la accin a realizar cuando la expresin a evaluar seafalsa, que para el ejemploserairaclases. Veamos como se aplican estos conceptos en trminos de programacin. La expresino condicin que se evala en unaestructuracondicional es una expresin booleana, que tomauno ysolouno de dos valores posibles, True o False. Una expresin booleana se construye por medio de operadores relacionales y/o lgicos que seaplican a unos operandos (datos, variables, atributos y funciones del mismo dominio). Lasexpresioneslgicasestncompuestasdelasiguientemanera: operando1Operadoroperando2 Donde operando1 y operando2 son datos sobre los cuales cae el peso de la comparacin y el operador es la operacin de la comparacinquesehadehacer. Tipodeoperadoresrelacionalesbsicos: OPERADOR Mayorque Mayoroigual Menorque Menoroigual Diferente Igualdad SIMBOLO > >= < <= != ==

Estos son operadores binarios, es decir, necesitan dos operandos que sern los dos datos que ellos han de comparar. Si la expresin es cierta, la expresin booleana retorna el valor true, en caso contrario,asumeunvalordefalse.

Porejemplo,lassiguientessonexpresionesbooleanas: a)3==3b)4+2<8c)A>=B Veamosque cadaoperadorrequieredosoperandosqueseubicanal lado izquierdo y derecho respectivamente. Las expresiones tomarn lossiguientesvaloresdeverdad: a)3==3verdadero(true) b)4+2<8verdadero(true) c) A> = B falso (false) por que la letra A tiene un valor Ascci menorqueeldelaletraB. Comoejercicio intente determinar elvalordeverdaddelassiguientes expresionesbooleanas: a)4*2+1<>3*32 b)3/2!=6/4 c)m<e d)5!=(32)*2 Como es de esperar la expresin booleana tambin puede estar formadaporoperadoreslgicos. Un operador lgico no es ms que un conectivo lgico que puede comparar (asociar) dos o ms expresionesbooleanas simplescomo las anterioresformando as expresionesbooleanascompuestas. Los operadores lgicos requieren como operandos (datos a relacionar o comparar)valoresy expresionesbooleanas (datosquetomanelvalor trueofalse).

LosoperadoreslgicosenJAVAsonlossiguientes: Operador YLgico OLgico Smbolo &&

Negacin Lgica A excepcin de la negacin lgica que es un operador unario (que requiere solo un operando) los dems operadores son binarios (requieren dos operandos) y como se hadicho estos operandos son datos booleanos (true ofalse),cadaoperadorlgico poseeunatabla deverdadmediantelacualseestablecequevalorasumealrelacionar elolosvaloreslgicos.Lastablassonlassiguientes:

TabladelY Expresin1 True True False False Expresin2 True False Trae False Expresin1YExpresin2 True False False False

TabladelO Expresin1 True True False False Expresin2 True False True False Expresin1OExpresin2 True True True False

TabladelaNegacion Expresin True False Negacion Expresin False True

En estastablas debemosanotar que Expresin uno ,Expresin dos y Expresin representanindistintamente cualquierexpresin u operando de tipo booleano y que los operadores se encargan de relacionar por medio de su tabla de verdad los valores correspondienteuoperandos,arrojandounnicovalordeverdad. Porejemplo: (3 = 5) && (2 = 2) Existen dos expresionesbooleanas (3 =5) (2 = 2). Debemosevaluarcadaunaindependientedelaotraas: (3=5)=falsey(2=2)=true. Con estos valores booleanos procedemos a aplicar el operador and as:(True)&&(False). Buscamos en la tabla de verdad la combinacin true false para el Y (dondeexpresinunocorrespondeatrueyexpresindosafalse). As(true)And(false)=false. Esdecir,quelaexpresinbooleana(3=5)Y(2=2)=false. Ntese aqu el uso de parntesis para indicar el comienzo y finalizacindecadaexpresinbooleana. Miremosahoraesteejemplo: (A=A)(31<>2). Laprimeraexpresin(A=A)estrue. Lasegundaexpresin(31<>2)esfalse. ElOentoncesrelacionarlosvaloresas:(true)O(false). Dndonos como resultado final el valor true para la expresin booleanaplanteada.

Trate de desarrollar el valor lgico para las siguientes expresiones booleanas: a)(true)(2<>1) b)!true c)(3!=3)&&(41<0) d)(1>=2)&&(2<=1) e)!false f)!(true!!false) g)(A!=B)!!(true) h)!(5!=5) Como podemos pensar la construccin de expresiones booleanas compuestas requieren el uso de parntesis. Existe un concepto llamado procedencia de operadores (lgicos y/o relacionales) que es afectada por elusodelosparntesis.Estaprocedenciaindicaque parte de la expresin booleana compuesta se empieza primero yen que orden se evalan las siguientes as como tambin se van relacionando cada expresin simple conectada con otras por medio deloperadorlgicorespectivo. Bien , ahora estudiaremos las estructuras condicionales que presentanelsiguienteformato: a)CondicionalSimple: Palabra(Expresin)PorVerdadero CondicionalInstruccin1 Instruccinn

En caso quelaexpresinseaverdaderaalmomentodeevaluarsese ejecutarn las instrucciones de 1..n , pero en caso de ser falso no ejecutar ninguna, el compilador seguir ejecutando las otras instrucciones. Estructuracondicionalsimple

if(condicin) { instruccionesaejecutar } El condicionaltambinpermiteevaluar unaexpresinydeterminarlas accionesaseguirporverdaderooporfalsodelasiguientemanera:


b. CondicionalCompuesto:

Palabra(Expresin)PorVerdaderoPorFalso CondicionalInstruccin1Instruccina InstruccinnInstruccinz En dichocasose ejecutarnlas instrucciones queseencuentranen el condicional dependiendodel resultado de la evaluacin ya seapor verdadero o por falso ( recuerde que se ejecutara un conjunto de instrucciones ). En el condicional simple si no era verdadero el compiladornoejecutabaningunadelasinstruccionesdelcondicional. Estructuracondicionalcompuesta ifcondicin { instruccionesaejecutarporverdadero } else { instruccionesaejecutarporfalso } Nota :Observe la ausencia de punto y coma antes del else, esto se debealasintaxisdellenguaje. Veamos la implementacin de algunos ejemplos donde los mtodos necesitan evaluar ciertas condiciones para poder ejecutarse adecuadamente.

Al resolver los problemas algunos mtodos evalan condiciones, analice la forma como se evala y luego identifique en la implementacindelmtodoelcdigocorrespondiente:

Repase los planteamientos de los problemas del capitulo anterioryobserveeldiseodecadaunadelasclasesparaque puede entender acabalidad la implementacin queiniciaremos acontinuacin. TRABAJADOR: Caractersticasdelosmtodosquenecesitanevaluarcondiciones.

El mtodo DescuentoIss deben saber el rango del salario para determinar el porcentaje a calcular como descuento y valor a descontar.

Estructuradeevaluacin: ifCondicinInstruccinaejecutar

PorVerdaderobsico*0.08 PorFalsobsico*0.12 Condicin:Quebasicoseamenorde280000

El mtodo DescuentoRetencin debe determinar si el salario bsicoestenelrangoparasabersitienedescuentoon.

Estructuradeevaluacin: IfCondicinInstruccinaejecutar

Porverdaderobsico*0.10

Porfalso0 Condicin:Quebsicoseamayorde400000

El mtodo Subsidio de igual manera debe determinar elrango del salariobsicoparapoderasignarunsubsidioono.

Estructuradeevaluacin ifCondicinInstruccinaejecutar

Porverdadero25000

Porfalso0 Condicin:Quebsicoseamenorde280000. Ntese que en este problema utilizamos el mtodo llamado Bsico en la mayoradelos otros mtodos (imagnese quetendrquehacer sinolohubiesediseado). classtrabajador { private: intnumerohoras floatvalorhora public trabajador(){} voidasignarnhoras(intvalhoras){ numerohoras=valhoras } voidasignarvalor(floatvalvalor){ valorhora=valvalor

} intobtenernhoras(){ returnnumerohoras } floatobtenervalor(){ returnvalorhora } floatbasico(){ floatsueldo sueldo=obtenerhoras()*obtenervalor() returnsueldo } floatdescuentoiss(){ floatdescuento ifbsico()<280000 {descuento=basico()*0.08 } else {descuento=basico()*0.12 } returndescuento } floatdescuentoretencion(){ floatretencin ifbasico()>400000 {retencin=basico()*0.1 } else {retencin=0 } returnretencion }

floatSubsidio(){ floatvalorsub ifbasico()<280000 {valorsub=25000 } else {valorsub=0 } returnvalorsub } floatNeto(){ floatsneto sneto = basico( ) descuentoiss( ) descuentoretencin + subsidio returnsneto } }

Clasealmacen Caractersticasdelosmtodosquenecesitanevaluarcondiciones:

En este clase el mtodo Descuento debe determinar el tipo de artculo que se seleccion para poder calcular el descuento a realizar.

Estructuradeevaluacin: ifcondicinInstruccinaejecutar

PorVerdaderoValorNeto*0.07

PorFalsoIfCondicin2 Instruccinaejecutar

PorVerdaderoValorNeto*0.08

Por Falso

ValorNeto*0.12

Condicion1:Siobtenertipoesiguala1 Condicion2:Siobtenertipoesiguala2 Nota: No es necesario evaluar si obtenertipo es igual a 3 dado que no existenmastiposyelfalsodeCondicion2asumequeesdetipo3. classalmacen{ Private intCantidad floatValor stringTipo public: almacen(){ cantidad=0

valor=0 tipo= } voidAsignarcantidad(intvalcant){ cantidad=valcant } voidAsignarValor(intvalvalor){ valor=valvalor } voidAsignatipo(stringvaltipo){ tipo=valtipo } intObtenercantidad(){ returncantidad } floatObtenerValor(){ returnvalor } stringObtenertipo(){ returntipo } floatDescuento(){ floatdesc Ifobtenertipo()==1 {desc=Valorneto()*0.05 } Else Ifobtenertipo()==2 {desc=valorneto()*0.08 } Else {desc=valorneto()*0.12

} returndesc } floatValorneto(){ return(obtenervalor()*obtenercantidad()) } floatTotalaPagar(){ floatpago pago=valorneto()descuento() returnpago } } Cabe destacar que en la implementacin de mtodo descuento es necesario declarar unavariable de mbito internoal mtodo( solo se conoce al interior de ste) para capturar el valor resultante de la operacin valornetopor porcentajede descuentocon el fin de hacer maslegibleyentendibleelcdigoqueseescriba.

Claseestudiante Caractersticasdelosmtodosquenecesitanevaluarcondiciones:

El mtodo EvaluarAprobacin debe determinar si el promedio obtenido (CalcularPromedio) es mayor que 3.5 para saber si aprobono.Notequedevuelvefalsooverdadero.

Estructuradeevaluacin: IfCondicinInstruccinaejecutar

PorverdaderoTrue

PorfalsoFalse Condicin:Sicalculapromedioesmayorde3.5.

El mtodo NotaMenor es algo un poco complejo por que debe evaluar cual de las notas es la menor debido aque la evaluacin debe comprobar varias condiciones, por ende se hace necesario utilizarconectoreslgicos(&&)parafacilitarlaimplementacin.

Estructuradeevaluacin:

IfCondicin1YCondicin2

PorVerdaderoinstruccin1

PorFalsoifCondicin3YCondicin4 PorVerdaderoInstr.2

Por Falsoinstruccin 3

Condicion1:obtenernota1esmenorqueobtenernota2. Condicion2:obtenernota1esmenorqueobtenernota3.

Condicion3:obtenernota2esmenorqueobtenernota1. Condicion3:obtenernota2esmenorqueobtenernota3. Analiceporquenoesnecesarioevaluarsiobtenernota3esmenor. Nota: Observando la tabla Y, teniendo en cuenta la estructura del condicional compuesto, analice cuidadosamente el mtodo NotaMenorysaquesuspropiasconclusiones. classtestudiante { private floatprimeranota floatsegundanota floatterceranota Public testudiante(){ primeranota=0 segundadota=0 terceranota=0 } voidAsignarNota1(floatvalnota){ primeranota=valnota } voidAsignarNota2(floatvalnota){ segundadota=valnota } voidAsignarNota3(floatvalnota){ terceranota=valnota } floatobtenernota1(){ returnprimeranota

} floatobtenernota2(){ returnsegundadota } floatobtenernota3(){ returnterceranota } floatcalculapromedio() { floatsuma suma=obtenernota1()+obtenernota2()+obtenernota3() return(suma/3) } boolevaluaaprobacion() { ifcalcularpromedio()>=3.5then return(true) else return(false) }

intnotamenor(){ if((obtenernota1()<obtenernota2())&&(obtenernota1()<obtenernota3()) {return(1)} else if((obtenernota2()<obtenernota1())&& (obtenernota2()<obtenernota3()) {return(2)} else

{return(3)} }

3.INSTANCIANDOCLASES

Hastaahora nos hemosdedicadoadiseareimplementarclasesque sonsolucinaproblemas,peronosembarganunaspreguntas: buenoycomoseusanesasclases? Sifuncionan? Comolaspruebo? Bienparapoderutilizarunaclasedebemos: Primero definir una instancia de la clase,lo cual es crearuna ovarias referencias a la clase a travs de nombres o identificadores que definimos,comolohacemoscuandodefinimoslosatributos: intsueldo Paradefinirunainstanciaseguimoslamismaregla: testudiantealumno Dondetestudianteeslaclaseyalumnoeslainstanciadelaclase. Segundocrearlainstanciaalumnodelasiguientemanera: alumno=newtestudiante() Donde new es una palabra reservada de java que permite crear el espaciodememoriaparalainstancia. Hay que tener en cuenta que en java cuando se crea la instancia automticamente se llama el constructor y ejecuta las instrucciones que hallamos definido en el, lo cual indica que si lo definimos en la clase con parmetros debemos pasarle los valores en el mismo momentodecreardichainstancia. Tercerohacerelllamadodelosmtodosasi: alumno.AsisgnarNota1(10) alumno.AsisgnarNota2(50) alumno.AsisgnarNota3(17) Cuandolosmtodosdevuelven valoresdebemosguardarlosvalores quedevuelvenenvariablespreviamentedefinidas: floatpromedio promedio=alumno.calculapromedio()

El orden de llamado de los mtodos depende exclusivamente de como se requiere resolver el problema, pero tenga en cuenta de llamarlos mtodos queguardanvaloresantesdellamarmtodosque efectenoperacionescondichosvalores. Ejemplo: A continuacin instaciamos la clase trabajador y activaremos sus mtodos,yharemosanlisisdeloquesucede. trabajadorempleado floattotal empleado=newtrabajador() empleado.asignarhoras(36) empleado.asignavalor(3546) total=empleado.Neto() Analisis
1. 2.

3. 4. 5.

Definimoslainstanciaempleadodetipodeclasetrabajador. Creamos la instancia con new, ntese que el constructor no ejecuta instruccin alguna ni tampoco recibe valores como parmetros. Enviamos el valor 36 al atributo numerohoras a travs del mtodoasignarhoras. Enviamos el valor 3546 al atributo valor a travs del mtodo asignavalor. A la variable total leasignamosel resultadodelas operaciones querealizaelmtodoneto. Operacionesdelmtodoneto: llama al mtodo basico, el cual obtiene el valor de los atributosporintermediodesusmtodos. Llamaelmtododescuentoissyselorestaabasico. Llama a descuentoretencion ytambin se lo restaalvalor devueltoporelbsico. Llamaalmtodosubsidioyselosumaalbsico.

Despus de analizarcomo seusanlasclasesatravsdesuinstancia allectorlepuedenembargarotraspreguntascomo: Dondeescriboelcdigoquedefineycrealasinstancias? Por que se dan valores directamente o es que no se pueden ser definidosporelusuario? Para responder la primera pregunta lo que se debe realizar es crear unaclaseenjavaqueimplementeelsiguientemtodo: publicstaticvoidmain(Stringargs[]) Escribiendo dentro de el cdigo correspondiente a ladefinicin de la instanciayalllamadodelosmtodosrespectivos. Ejemplodeusodelaclasetrabajador importjava.io.* classPrincipal { publicstaticvoidmain(Stringargs[]) { trabajadorempleado=newtrabajador() empleado.asignarhoras(36) empleado.asignavalor(3546) System.out.println(empleado.Neto()) } } Nota:observequeencabezadoincluyelainstruccinimportjava.io.* Esto es para poder utilizar las clases de entrada ysalida.Adems la instruccin System.out.println se usa para mostrar por pantalla el resultadodecualquieroperacinoparamostrarmensajesalusuario. Ahora planteamos un problema y desarrollamos su solucin donde se involucren todosloselementoshastaahoratratadosyrespondael interrogantedelasegundapreguntadeinterfazconelusuario.

Problema Disear una claseque permitamanejar la informacin dellamadasen un sai teniendo como base la duracin de la llamada y el valor del minuto. Solucin classLlamada{ intValMin,Tiempo Llamada(){ } publicvoidLlevaMinuto(intVal) { ValMin=Val } publicvoidLlevaTiempo(intTi) { Tiempo=Ti } intTraeMinuto() { returnValMin } intTraeTiempo() { returnTiempo } intValorLlamada() { intCalcula Calcula=TraeMinuto()*TraeTiempo() returnCalcula}}

Clasequeinstancia importjava.io.* classPrincipal{ publicstaticvoidmain(Stringargs[]){ LlamadaLlamar=newLlamada() intVmin=0 intTiem=0 BufferedReader Tecla = InputStreamReader(System.in)) new BufferedReader(new

try{ System.out.print("Digiteelvalordelminuto:") Vmin=Integer.parseInt(Tecla.readLine()) Llamar.LlevaMinuto(Vmin) System.out.print("Digiteeltiempo:") Tiem=Integer.parseInt(Tecla.readLine()) Llamar.LlevaTiempo(Tiem) }catch(IOExceptionvarerror){System.out.println("Error")} System.out.println("")//mostrarelvalordelallamada System.out.println("Elvalordelallamada"+Llamar.ValorLlamada()) System.out.println("") } } Anlisis Lainstruccin try{ }catch Permite capturar algn error ocurrido al escribir los datos yevitamos que se bloquee el programa cuandoestemoscargando datos desde elteclado.

BufferedReaderTecla=newBufferedReader(newInputStreamReader(System.in))

En esta instruccin se crea unainstanciadelaclase bufferedReader que java tiene implementada llamada tecla la cual es capaz de leer caracteresdesdeelteclado. Tecla.readLine() Se haceunllamadoalmtodoreadlinequepermite leer una lnea de caracteres por pantalla y guardarla en los atributos dondeseasigne. Integer.parseInt Convierte la cadena ledaen datos enterosy este valorconvertidodebeasignarseaundatosdetipointeger. Todo esto se debe realizar dado que en java lo que se captura son cadenas de caracteres y debemos hacer las conversiones a sus valoresnumericoscorrespondientes.

Taller
1. 2. 3. 4. 5. 6. 7. 8.

Expliqueparaquesonlosparmetrosenlosmtodos. Concluyaparaquesirveelencapsulado. Quediferenciasexistenentrecadaunodelosmtodos. Expliqueparaquesirvenlosconectoreslgicos Paraqueseusanlasestructurascondicionales. Queesunainstancia? Haydiferenciaentreinstanciayclase? Sepuedeinstanciarunaclasevariasveces?,como?

Diseeeimplemente:
1.

Dados tres nmeros calcular el mayor, el menor y el nmero

medio,diseareimplementarlaclasepertinente.
2.

Dado el nombre, la edad y sexo de una persona disee e implemente una clase en la que el constructor inicialice los atributos, adems que determine si la persona es apta para votar teniendo en cuenta que solo votan las personas que cumplan las siguientes condiciones: mujeres mayores de 21 aos,hombresmayoresde18aos. disee e implemente una clase que dado el nombre, estatura, edad, peso. Determinesi esa personapuedepracticar o no los siguientesdeportesteniendoencuentalasrestricciones: a. Ftbol:estaturamnima170,edadmxima17aos b. Bsquet: estatura mnima 180, edad mnima 16 aos mxima19aos c. Softbol:pesomnimo70kilos,edadmnima18aos. d. Boxeo:pesomximo100kilos,estaturamnima170. Creelainstanciaqueutilicelasolucindelejercicio3. Cree una clase que utilice y aplique dos instancias para le solucin planteada en el ejercicio 2 y de valores que cumplan paracadacondicin.

3.

4. 5.

Para consulta se presentan dos ejemplosdeclases,unaparamanejo de ventanas y otra clase para manejo de texto y conversin de nmerosquepuedenusarycomplementarenelfuturo. importjava.awt.* importjava.lang.* importjava.awt.event.* classMiVentana{ staticFrameventana=newFrame() staticLabelEventana=newLabel("Digiteunnombre") staticTextFieldTventana=newTextField(15) staticButtonboton1=newButton("Guardar") staticButtonboton2=newButton("Otro") staticintdato=0 publicstaticvoidmain(Stringargs[]){ ventana.setTitle("manejodeventanas") ventana.setLayout(newFlowLayout()) ventana.add(Eventana) ventana.add(Tventana) ventana.add(boton1) ventana.add(boton2) ventana.pack() ventana.setVisible(true) boton1.addMouseListener(newMouseAdapter() {publicvoidmousePressed(MouseEvente) {dato=Integer.parseInt(Tventana.getText()) if(dato<100) dato=dato+20 else dato=200}})

boton2.addMouseListener(newMouseAdapter() {publicvoidmousePressed(MouseEvente) {Tventana.setText(String.valueOf(dato))}}) ventana.addWindowListener(newWindowAdapter() {publicvoidwindowClosing(WindowEvente){ System.exit(0)}}) }} Importjava.io.* publicclassLeeTeclado{ InputStreamReadertecla BufferedReaderteclado publicLeeTeclado(){ tecla=newInputStreamReader(System.in) teclado=newBufferedReader(tecla) } publicStringleerString(){ Stringvalor=newString() try{ valor=teclado.readLine() }catch(IOExceptionioe){ System.out.println("Errordelecturadedatos") valor="" } returnvalor } publicintleerEntero(){ intvalor=0 try{ StringvalorLeido=teclado.readLine()

Integerconvierte=newInteger(valorLeido) valor=convierte.intValue() }catch(IOExceptionioe){ System.out.println("Errordelecturadedatos") valor=0 } returnvalor } }

CAPITULOIII

CICLOSYARREGLOS

Una de las situaciones mas comunes que nos encontramos en el mbito de laprogramacin,consisteenlanecesidadderepetirdentro de un mtodo un conjunto de instrucciones o repetir varias veces la activacin de un mtodo. Todo esto se puede realizar utilizando instrucciones repetitivas llamadas ciclos, lascualesvamos a estudiar yanalizaracontinuacin. Ciclosconnumerodeiteracionesdefinidas:

1.CICLOFOR

Este se caracteriza por ejecutar las instrucciones que se encuentran dentro de apartir de un dato inicial,conunincrementoautomticode uno en uno hasta un valor final o sea el numero de iteraciones que necesitamosenelproblema. Sintaxisdelciclofor for(i=1i<tamaoi++) { conjuntodeinstrucciones } Estructura i=1:Dondeiesuncontroladordelcicloqueleinicializaconunvalor. i<tamao: Expresin que se evala automticamente antes de cada vuelta de ciclo para determinar si repite nuevamente el conjunto de instrucciones teniendo en cuenta si es verdadero el resultado de la evaluacion. i++:Expresin de autoincrementodeunoenuno,estoconelobjetivo deacercaseaunvalorfalse,quedeterminelaparadadelciclo.

EjemploMostrarlosnmerosdel1al10 for(i=1i<=10i++) { System.out.println(i) } Elresultadoser12345678910. Preguntas Cual ser el resultado si se remplazamos condicini<=10porlaexpresini>10? la expresin de por el por el

Cual seria el resultado si se cambiara el operador <= operador<? Cual seria el resultado si se cambiara el operador <= operador==?

Tenga en cuenta eloperadorqueusa,dadoquelepuedehacerunao masiteracionesdelaspresupuestadas. Algunas veces no podemos definir explcitamente el numero de iteraciones que puede llegar a hacer un ciclo pero podemos contar con condiciones que deben cumplirse para que contine iterando o paraquedejedeiterarunciclo.

2.CICLOWHILE

Este ciclo tiene como caracterstica que debe cumplirse una condicin inicial de entrada (valor booleano true) y se repite el conjunto de instrucciones que se encuadran dentro de el mientras esta condicin se mantenga en verdadero, esto quiere decir que es funcin de nosotros determinardentrodeelconjuntodeinstrucciones definidas dentro del ciclo, una que garantice queen algn momento ese valor booleano true se convierte en false para darpor terminado elciclo.

Sintaxisdelciclowhile While(condicion=true) { conjuntodeinstrucciones condicion=false } Estructuradelciclowhile Condicin =true :Esunaexpresinlgicaqueseargumentaconvalor inicial de verdadero porque sino el ciclo no ejecutara ninguna instruccinqueseencuentredentrodeel. Condicin =false: Es una expresin lgica que debe resulta de evaluar alguna de las instrucciones dentro del ciclo y adems debe tomarel valordel false en cualquier iteracin del ciclo,paragarantizar la terminacin del ciclo y no convertir el proceso en algo indefinido. Esta puede ser la asignacin de un valor determinado, el incremento de un contador o simplemente el resultado de una operacin aritmtica, asociadas con el operador utilizado en la condicin de controldelciclo. Ejemplo: Mostrarlosprimerosnmerosquesusumaseamenoroiguala25 i=0 maximo=25 suma=0 while(suma<=maximo) { System.out.println(i) I++ suma=suma+i } Elresultadoseria0123456

Anlisis Convaloresinicialesi=0,suma=0,maximo=25 Evaluamossuma<=maximo(0<=25) Como es verdadero mostramos el contenido de i que es 0, incrementamoselvalordeien1,yasumaasignamos1 Evaluamossuma<=maximo(1<=25) Comoesverdaderomostramoselcontenidodeiquees1 Incrementamos i en 1(i es 2) ensuma sumamosel 1 quetenia mas elvalordeiquees2(suma3). Evaluamossuma<=maximo(3<=25) Comoesverdaderomostramoselcontenidodeiquees2 Incrementamos i en 1 (i es 3) ensuma sumamosel3queteniamas elvalordeiquees3(suma6). Evaluamossuma<=maximo(6<=25) Comoesverdaderomostramoselcontenidodeiquees3 Incrementamos i en 1 (i es 4) ensuma sumamosel6queteniamas elvalordeiquees4(suma10). Evaluamossuma<=maximo(10<=25) Comoesverdaderomostramoselcontenidodeiquees4 Incrementamos i en 1 (i es 5) en suma sumamos el 10 que tenia maselvalordeiquees5(suma15). Evaluamossuma<=maximo(15<=25) Comoesverdaderomostramoselcontenidodeiquees5 Incrementamos i en 1 (i es 6) en suma sumamos el 15 que tenia maselvalordeiquees6(suma21). Evaluamossuma<=maximo(21<=25) Comoesverdaderomostramoselcontenidodeiquees6 Incrementamos i en 1 (i es 7) en suma sumamos el 21 que tenia

maselvalordeiquees7(suma28). Evaluamossuma<mximo(28<=25) Como es falso termina el ciclo yninguna de lasinstrucciones que se encuentran dentro de el se vuelven a ejecutar por ende el 7 no se muestra. Ntese que suma se va incrementando hasta que toma unvalor que nocumpleconlacondicindecontroldelciclo. que resultado mostrara si invierte lasinstruccionesdentro delciclo delasiguientemanera:? i=0 suma=0 while(i<=suma) { Suma=suma+i System.out.println(i)} Nota: hay que tener cuidado con el orden en que escribimos las instruccionesylacondicindesalidadentrodeunciclowhile Uncicloquenuncaseejecuta I=3 While((i>3)(i<3)) { i++ System.out.println(i) } Uncicloquenuncatermina I=3 While(i>=3) { i++ System.out.println(i) } Recuerde el ciclo while primero evala lacondicin antes deejecutar

cualquierinstruccin.

3.ARREGLOS

Los arreglos son colecciones de datos del mismo tipo que se almacenan secuencialmente, los cuales se manipulan con un identificadoronombre. Caracterizacindeunarreglo. Notas 0 1 2 3 4 5 34 35 45 10 18 50 Donde

6 32

7 25

8 9 39 24

Notaseselnombredelarreglo 0,1,2,3.9 soncadauno delos ndicesoposicionesde los elemento delarreglo. Siendo 0 elprimerelementodel arregloy9elultimoelementodelarreglo. 34, 35,4524 son los datos almacenados en cada posicindel arreglos, osea el valor de cadaelementodel arreglotodossondelmismotipoodominio. El tamao delarregloeselnumero mximodeelementos quesepuedenalmacenar,enestecasoes10

Nota A los arreglos solo se puede acceder a travs de la posicin individual de cada uno de sus elementos la cual esta indicada por el ndiceoposicin. Comoaccederaunarreglo? Para manejar un arreglo solo puedeser de un elementoa la vez,de lasiguienteforma: Paraguardarinformacin

Nombrearreglo[posicion]=valor Notas[0]=34 Esto indica que en el arreglo Notas en la posicin 0 se guarda el numero34 Paraextraerlainformacin Variable=Nombrearreglo[posicion] Intdato Dato=Notas[5] Esto nos indica que en dato se guarda el valor almacenado en la posicin5delarregloNotas,enestecasodatoguardar50. No es necesario que tengamos que acceder directamente alarreglo indicando explcitamente cualeslaposicin delelemento, tambinlo podemos hacer haciendo uso de las variables controladoras de los ciclos,garantizandorecorrer todo elarreglodeelementoenelemento conmenosinstrucciones. Porejemplo: SacarelpromediodenotasdelarregloNotasusandounciclofor Suma=0 Promedio=0 For(i=0i<10i++) Suma=suma+Notas[i] Promedio=suma/10 System.out.println(promedio)

Observe:
1.

La condicin del ciclo i<10 no incluye el igual, dado que la posicin10dentrodelarreglonoexiste.

2.

3.

la instruccin notas[i] hace quecada vezque i cambiedevalor, ose se incremente, se puede acceder a cada elemento del arreglo. hay una sola instruccin dentro del ciclo Suma=suma+Notas[i] por ello no se hace necesario el uso de llaves{} para indicar comienzoyfindelciclo.

Mtodosdebsqueda Planteamiento1 Problemaenelarreglonotasqueremoshallarcualesnumeromayor: Notas 0 1 2 34 35 45 3 10 4 5 18 50 6 32 7 25 8 9 39 24

Para implementar un mtodo capaz de resolver el problema se analizanlassituaciones:


1. 2.

Comoempezar comocompararybuscar

Para comenzar asumimos una hiptesis el primer elemento del arreglolotomamoscomosifueraelmayor.Mayor=notas[0] Segundo recorremos todo el arreglo peguntando si el valor guardado en mayor es menorqueelvalorencadaposicindelarreglo,encaso de ser verdadero se debe actualizar el valor del mayor con el contenidodelelementocorrespondiente Fori=0i<tamaodelarregloi++ Ifmayor<notas[i] {mayor=notas[i]} Planteamiento2 Deseamos implementar un mtodo que nos busque un elemento dado dentro del arreglo y nos devuelva la posicin donde se encuentrasiesta.

Para implementar un mtodo capaz de resolver el problema se analizanlassituaciones: 1.Comoempezar 2.Comocompararybuscar 3.Comopararlabsqueda 4.Comosaberqueencontramos Parainiciarelmtododeberrecibirelvalorabuscarcomoparmetro dadoqueelusuarioesquienvaadecidircualnumerobuscar. Segundo debemos preguntarsi elelementodadoesigualacadauno deloselementosenelarreglo. elemento==notas[i] TerceroQueciclousamosycomoparamos? Como no sabemos cuantas iteraciones tendremos que hacer antes deencontrareldato,elcicloidealeselwhile. Elciclodeberdetenerseconlassiguientescondiciones: Cuando no este el elemento en el arreglo y se llegue al final del mismo i<tamao, o cuando lo encuentre elemento==notas[i], esto quieredecirquebusquemientrasseadiferente. I=0 while(i<Tamao)&&(elemento!=notas[i]) i++ Cuarto para saber que encontramos es necesario preguntar porque se termino el ciclo? , lo cual logramos preguntando si i es igual al tamao.Encasoafirmativoquieredecirqueitomoelvalordeltamao del arreglo por ende el elemento no se encuentra y devolvemos un valor que no corresponda a ningn ndice del arreglo (1). En caso contrarioinosindicacualeslaposicinendondeestaelelemento. if(i==Tamao) return1 else

returni Clasequemanipulaunarreglodenmeros Para manipulararreglos en java hayqueteneren cuenta quesiempre debe existir una instanciadel arreglo antesdeusarlos, esto debido a que java considera a los arreglos como una clase y as los tiene implementados. A continuacin disearemos una clase para el manejo de un arreglo denmerosimplementandolosmtodosnecesarios. classArreglo{ intArrNum[] intCantNum publicArreglo(intc) { CantNum=c ArrNum=newint[CantNum] } voidLlevaNumArr(intNum,intpos) { ArrNum[pos]=Num } intTraeNumArr(intpos) { returnArrNum[pos] } intTraeCantNum() { returnCantNum } publicintBuscaMayor()

{ intMayor=0 for(inti=0i<TraeCantNum()i++) { if(ArrNum[i]>May) { Mayor=ArrNum[i] } } returnMayor} publicintBuscaPos() { intMayor=0 intpos=0 for(inti=0i<TraeCantNum()i++) { if(ArrNum[i]>Mayor) { Mayor=ArrNum[i] pos=(i) } } returnp} publicintBuscaNumero(intVal) { inti=0 while(i<TraeCantNum())&&(val!=ArrNum[i]) i++ if(i==TraeCantNum()) return1 else returni} publicvoidOrdenaNumeros(){ intj=0 intTemp=0

intinc=1 while(j<TraeCantNum()){ for(inti=0i<TraeCantNum()ji++) { if(TraeNumArr(i)<TraeNumArr(j)){ Temp=TraeNumArr(j)l LlevaNumArr(TraeNumArr(i),j) LlevaNumArr(Temp,i) } } j++ } } } El mtodo ordenanumeros() permite organizar el arreglo de manera ascendente, utilizando elpopular mtodo de burbuja, el cualconsiste en llevar el elemento mas pesado a su posicin real, y as sucesivamenteconcadaunodesuselementos. Como ejercicio complementario investigue en que consiste y como funciona el mtodo burbuja deordenamientoque esta implementado enlaclase.

Clasequeinstanciaarreglo importjava.io.* importjava.lang.* classLlenaArreglo{

publicstaticvoidmain(Stringargs[]){ intNume=0 BufferedReader tecla new BufferedReader(new InputStreamReader(System.in)) try{ System.out.println("***************arreglos**************") System.out.println("") System.out.print("Digitaladimensiondelarreglo==>") Nume=Integer.parseInt(tecla.readLine()) ArregloLlena=newArreglo(Nume) System.out.println("Digitanumeros") for(inti=0i<Llena.TraeCantNum()i++){ System.out.print("Posicion"+(i+1)+":") Nume=Integer.parseInt(tecla.readLine()) Llena.LlevaNumArr(Nume,i) } System.out.println("") System.out.print("Digitaelnumeroabuscar==>") Nume=Integer.parseInt(tecla.readLine()) if(Llena.BuscaNumero(Nume)!=0){ System.out.println("") System.out.println("El numero " + Nume + " se encuentra en al posicion==>"+Llena.BuscaNumero(Nume)) System.out.println("")} System.out.println("El numero mayor es " +Llena.BuscaMayor()+ " en laposicion"+Llena.BuscaPos()) System.out.println("") System.out.println("") Llena.OrdenaNumeros() System.out.println("ArregloOrdenado") System.out.println("") for(inti=0i<Llena.TraeCantNum()i++){ System.out.print(""+Llena.TraeNumArr(i)+"") } System.out.println("")

System.out.println("") }catch(IOExceptionvarerror){System.out.println("Error") } }

Taller Haga un anlisis exhaustivo de el cdigo de la clase Llenaarreglo y contestelossiguientesenunciados: 1.Dondesehacelainstanciadelaclase 2.Quemtodoenvaladimensindelarreglo. 3. En queseccin se capturadelos nmeros quesehandeguardar enelarreglo.

4. Ubique donde se busca un numero dado por el usuario y que muestracomoresultado. 5.Haga un seguimiento alsegmentodondemuestraelnumeromayor delarreglo. 6.expliqueelcdigodondesemuestraelarregloordenado Disee e implemente las clases correspondiente para resolver los siguientesplanteamientosutilizandounoovariosarreglos. 1.El manejo de un sai donde varios usuarios hacenvarias llamadas enelda,tengaencuentaqueesnecesariosaber:
a. b. c.

Lacuentadeunsolousuario. Cualfueelusuarioquehizomasllamadas. Cual es costo de la cuenta mas grande en trminos de valoryqueusuariolahizo. Lacuentatotaldelda.

d. 1.

El Departamento de ingeniera de sistemas deseamantener un control de las notas de cada estudiante en cada materia del primersemestre. Se debeguardar porcada estudianteencada una de sus materias las 3 notas parciales, y se calcula la definitiva delasiguientemanera(laprimera notacorrespondeal 25%, la segunda nota corresponde al 35% y la cuarta nota correspondeal40%).Sedeseasaberlasiguienteinformacin:
a. b. c.

Cualeselpromediodecadaestudianteenelsemestre. Elnombredelestudiantedemejorpromedio. Que materias perdi cada estudiante y con que calificacin (para aprobar una materia la nota mnima es 3.0). Cantos estudiantesperdieron1materia,cuantosperdieron

d.

2materiaycuantosperdieronmasde2materias.
e.

Cual fue la nota mas altaen cadamateriayqueestudiante laobtuvo.

A continuacion se presentan dos ejemplos resueltos prar que los analice y le sirva de guia, note que por transcripcion puede faltar o sobrarsimbolos(,{,}). Elejemplo1:involucra2clases(TotalEstyLlenaEstudiantes) Elejempo2involucra3clases(Nomina,ArregloNominayPrincipal)

EJEMPLO1 Clasequemanipulavariosarreglosenparaleloporsuposicin. classTotalEst{ intCantEst intArrCod[] StringArrNom[] StringArrMat[] intArrSem[] floatArrNot[] publicTotalEst(intc){ CantEst=c ArrCod=newint[CantEst] ArrNom=newString[CantEst] ArrMat=newString[CantEst]

ArrSem=newint[CantEst] ArrNot=newfloat[CantEst] } voidLlevaCodigo(intCod,intpos) { ArrCod[pos]=Cod } voidLlevaNombre(StringNom,intpos) { ArrNom[pos]=Nom } voidLlevaMateria(SringMat,intpos) { ArrMat[pos]=Mat } voidLlevaSemestre(intSem,intpos) { ArrSem[pos]=Sem } voidLlevaNota(floatNot,intpos) { ArrNot[pos]=Not } intTraeCantEst() { returnCantEst

intTraeCodigo(intpos) { returnArrCod[pos]} StringTraeNombre(intpos) {

returnArrNom[pos]} StringTraeMateria(intpos) { returnArrMat[pos]} intTraeSemestre(intpos) { returnArrSem[pos]} floatTraeNota(intpos) { returnArrNot[pos]} publicfloatBuscaNotaMayor() { floatMayor=0 for(inti=0i<TraeCantEst()i++) if(ArrNot[i]>Mayor) Mayor=ArrNot[i] returnMayor } publicintBuscaCodigo(intCodi) { intPosicion=1 inti=0 while(i<TraeCantEst())&&(posicion==1) if(ArrCod[i]==Codi) Posicion=i Else i++ returnPosicion } }

ClasequeinstanciayactivaaTotalEst. importjava.io.* importjava.lang.* classLlenaEstudiantes{ publicstaticvoidmain(Stringargs[]){ intNEst=0 intNume=0 StringCade=null floatNota=0 BufferedReadertecla=newBufferedReader(new InputStreamReader(System.in)) try{ System.out.println("**Programaquecapturadatosdeungrupode estudiantes**") System.out.println("") System.out.print("DigiteNumerodeestudiantes==>") NEst=Integer.parseInt(tecla.readLine()) TotalEstLlena=newTotalEst(NEst) System.out.println("") for(inti=0i<Llena.TraeCantEst()i++){ System.out.println("Estudiante"+(i+1)) System.out.print("Codigo") Nume=Integer.parseInt(tecla.readLine()) Llena.LlevaCodigo(Nume,i) System.out.print("Nombre") Cade=(tecla.readLine()) Llena.LlevaNombre(Cade,i) System.out.print("Materia") Cade=(tecla.readLine()) Llena.LlevaMateria(Cade,i) System.out.print("Semestre") Nume=Integer.parseInt(tecla.readLine()) Llena.LlevaSemestre(Nume,i) System.out.print("Nota") Nota=Float.parseFloat(tecla.readLine())

Llena.LlevaNota(Nota,i) System.out.println("") } for(inti=0i<Llena.TraeCantEst()i++){ System.out.println("Etudiante"+(i+1)) System.out.print(Llena.TraeCodigo(i)+" "+Llena.TraeNombre(i)+""+Llena.TraeMateria(i)+" "+Llena.TraeSemestre(i)+""+Llena.TraeNota(i)) System.out.println("") System.out.println("") } System.out.println("") System.out.print("Digitaelcodigoabuscar==>") Nume=Integer.parseInt(tecla.readLine()) if(Llena.BuscaCodigo(Nume)>1){ System.out.println("") System.out.println("ElCodigo"+Nume+"eslaposicion==>" +(Llena.BuscaCodigo(Nume)+1)) System.out.println("Pertenecea:") System.out.println("Nombre: "+Llena.TraeNombre(Llena.BuscaCodigo(Nume))) System.out.println("Materia: "+Llena.TraeMateria(Llena.BuscaCodigo(Nume))) System.out.println("Semestre: "+Llena.TraeSemestre(Llena.BuscaCodigo(Nume))) System.out.println("Nota "+Llena.TraeNota(Llena.BuscaCodigo(Nume)))} System.out.println("") System.out.println("Lanotamayores"+Llena.BuscaNotaMayor()) System.out.println("") System.out.println("") } }catch(IOExceptionvarerror){System.out.println("Error") } } }

EJEMPLO2 Clasequemanipulalanominadeunsoloempleado publicclassNomina{ StringNombre StringDireccion intNroHoras intValHora publicNomina(){ } publicvoidLlevaNombre(StringNom){ Nombre=Nom } publicvoidLlevaDireccion(StringDir){

Direccion=Dir } publicvoidLlevaNroHoras(intNh){ NroHoras=Nh } publicvoidLlevaValHora(intVh){ ValHora=Vh } StringTraeNombre(){ returnNombre } StringTraeDireccion(){ returnDireccion } intTraeHoras(){ returnNroHoras intTraeValor(){ returnValHora } }

doubleSalarioBasico(){ doubleCalcula Calcula=TraeHoras()*TraeValor() returnCalcula } doubleSubsidio(){ doubleCalcula if(SalarioBasico()>300000) Calcula=0 else Calcula=30000 returnCalcula }

doubleRetencion(){ doubleCalcula if(SalarioBasico()>=300000) Calcula=SalarioBasico()*0.10 else Calcula=SalarioBasico()*0.05 returnCalcula } doubleIss(){ doubleCalcula Calcula=SalarioBasico()*0.03 returnCalcula } doubleSueldoNeto(){ doubleCalcula Calcula=SalarioBasico()+Subsidio()Retencion()Iss() returnCalcula } } Clasequemanejaunarreglodeobjetostiponomina importjava.lang.* importjava.io.* publicclassArregloNomina { NominaANomina[] NominaNom=newNomina() publicArregloNomina() { ANomina=newNomina[10] inti for(i=0i<10i++){ ANomina[i]=newNomina()

} } publicvoidLlevaNombres(StringNom,intPos){ ANomina[Pos].LlevaNombre(Nom) } publicvoidLlevaDirecciones(StringDir,intPos){ ANomina[Pos].LlevaDireccion(Dir) } publicvoidLlevaNroHoras(intNh,intPos){ ANomina[Pos].LlevaNroHoras(Nh) } publicvoidLlevaValHora(intVh,intPos){ ANomina[Pos].LlevaValHora(Vh) } publicStringTraeNombres(intPos){ returnANomina[Pos].TraeNombre() } publicStringTraeDirecciones(intPos){ returnANomina[Pos].TraeDireccion() } publicdoubleTraeNroHoras(intPos){ returnANomina[Pos].TraeHoras() } publicdoubleTraeValHora(intPos){ returnANomina[Pos].TraeValor() } publicdoubleNominaTotal(intNe){ doubleCalcula=0 intPos for(Pos=0Pos<NePos++){ Calcula=Calcula+ANomina[Pos].SueldoNeto()

} returnCalcula } publicdoubleSueldoMayor(intSM){ doubleMayor=0 inti=0 for(i=0i<SMi++){ if(ANomina[i].SueldoNeto()>Mayor){ Mayor=ANomina[i].SueldoNeto() } } returnMayor } }

Clasequeutilizaeinstancialaclasedeltipoarreglonomina importjava.io.* importjava.lang.* publicclassPrincipal{ publicstaticvoidmain(Stringargs[]){ NominaNomi=newNomina() ArregloNominaLlenaNomina=newArregloNomina() intNume=0 intNEmp=0 StringCade=null inti=0 BufferedReaderTecla=newBufferedReader(new InputStreamReader(System.in)) try{

System.out.println() System.out.println("") System.out.print("Digiteelnumerodeempleados") NEmp=Integer.parseInt(Tecla.readLine()) System.out.println("") for(i=0i<NEmpi++){ System.out.print("Nombre") Cade=Tecla.readLine() LlenaNomina.LlevaNombres(Cade,i) System.out.print("Direccion") Cade=Tecla.readLine() LlenaNomina.LlevaDirecciones(Cade,i) System.out.print("NumerodeHoras") Nume=Integer.parseInt(Tecla.readLine()) LlenaNomina.LlevaNroHoras(Nume,i) System.out.print("ValordelaHora") Nume=Integer.parseInt(Tecla.readLine()) LlenaNomina.LlevaValHora(Nume,i) System.out.println("") } System.out.println("Elsueldomayores "+LlenaNomina.SueldoMayor(NEmp)) System.out.println() System.out.println("Elvalortotaldelanominaes" +LlenaNomina.NominaTotal(NEmp)) System.out.println() System.out.println() for(intj=0j<NEmpj++){ System.out.println("Nombre"+(j+1)+""+ LlenaNomina.TraeNombres(j)) System.out.println("Direccion"+(j+1)+""+ LlenaNomina.TraeDirecciones(j)) System.out.println("NroHoras"+(j+1)+""+ LlenaNomina.TraeNroHoras(j)) System.out.println("ValHoras"+(j+1)+""+ LlenaNomina.TraeValHora(j)) System.out.println("SalarioNeto"+LlenaNomina.NominaTotal(j))

System.out.println("") } }catch(IOExceptionvarerror){System.out.println("Error...")} } }

PginainicialdeNetBeans.

EnNetBeansesnecesariocrearunaaplicacin,queesdonde debemoscrearlaclasequeimplementaelmtodopublicstacticvoid main[args],ydentrodeesteesdondeinstanciamoslasclasesque hemoscreados,acontinuacinestudiaremoscomocrearla aplicacinycomoagregarlasclasesqueimplementaremos,recuerde quelasinstanciasdebenirellaaplicacin.

ParacrearunanuevaaplicacinconNetBeansdebemosiralmen FilealaOpcinNewProject,comoapareceenlaimagensiguiente.

AcontinuacindentroSeleccionamosGeneraldentrodelas categorasyJavaApplicationenlaseccindeproyectos

Escribimoselnombredelproyecto,damosclickenelbotnfinalizar.

AcontinuacinvamosalmenFile>NewFile,paraunanuevaclase deJava

DentrodelaseccincategorasescogemosJavaClasesydentrode laseccintiposdearchivoseleccionamosJavaClass

Seledaelnombrealaclase,enestecasoHolaMundoydamosclick enfinalizar,recuerdequeelnombrequeaqudeseaelnombreque lehadadoasuclase.

EntornoNetBeanspreparadoparaempezaraprogramar.,enestos momentospodemosescribirelcdigocorrespondientealaclase.

reasdeleditor El recuadro pequeo que contiene las flechas ubicado en la parte superior es donde se encuentran las opciones para compilar y ejecutarlaaplicacin. El recuadro mediano ubicado en la zona izquierda es donde encontramos los archivos que contiene el proyecto HolaMundo.Aqui se encuentra la lista de clases que tiene el proyecto, en este caso contienelaclase principaldel proyectollamadaHolaMundo.javayotra clase creada que se llama Miclase.java, recuerde que debe crearun archivoparacadaclasecomoseindicoanteriormente El recuadro del grande del centro, es el rea de edicin del cdigo fuente del programa, donde podremos escribir y modificar elcdigo decadaunadelasclasescreadas.

BIBLIOGRAFIA

CORREA, Guillermo. Desarrollo de algoritmo y sus aplicaciones en Basic,Pascal,CobolyC.McGrawHill,1977. MULLER, Pierre Alain, Modelado de objetos con UML. Eyroles Gestin2000. KAM,Weis.HAMIY,Hein.Programacinorientadaaobjetosconturbo C++.Megabite,Omegaeditores. SANCHEZ ALLENDE,Jess.Java2 iniciacin y referencia. McGraw Hill2005. SCHILT,Helbert.Java2Manualdereferencia.McGrawHill2001.

You might also like