Fundamentos de Programación Ver 3.pdf

113
1 Fundamentos de Programación Ingeniería en Tecnologías de la Información y Comunicaciones Objetivo del curso: Analizar y solucionar problemas informáticos y representar su solución mediante herramientas de software orientado a objetos. Competencias previas Habilidad para el manejo de la computadora. Navegación en Internet. Capacidad de análisis y síntesis. Manejar herramientas de software mediante menús. Manejar comandos y funciones básicas en algún sistema operativo de computadora. Aplicar lógica matemática en la solución de problemas informáticos. Aportación del curso al perfil profesional: La asignatura de Fundamentos de Programación aporta al perfil del Ingeniero en Tecnologías de la Información y Comunicaciones, los conocimientos, habilidades, metodología, así como capacidades de análisis y síntesis, para plantear la solución de problemas susceptibles de ser computarizados, a través de diagramas de flujo, pseudocódigo, algoritmos y el paradigma de programación orientada a objetos. Temario: I. Fundamentos de programación orientada a objetos. I.1. Evolución de la programación I.2. Conceptos fundamentales de la Programación Orientada a Objetos I.3. Lenguajes orientados a objetos I.4. Relaciones entre clases y objetos I.5. Papel de clases y objetos en el análisis y el diseño II. Metodología de Solución de Problemas. II.1. Descripción del problema (enunciado) II.2. Definición de solución (especificaciones) II.3. Diseño de la solución (modelado) II.4. Desarrollo de la solución (codificación) II.5. Depuración y pruebas (pruebas) II.6. Documentación (manuales) III. Herramientas de programación. III.1. Simbología III.2. Reglas para la construcción de diagramas III.3. Pseudocódigo III.4. Tipos de datos y expresiones III.5. Estructuras lógicas

Transcript of Fundamentos de Programación Ver 3.pdf

Page 1: Fundamentos de Programación Ver 3.pdf

1

Fundamentos de Programación Ingeniería en Tecnologías de la Información y Comunicaciones

Objetivo del curso: Analizar y solucionar problemas informáticos y representar su solución mediante herramientas de software orientado a objetos. Competencias previas

Habilidad para el manejo de la computadora.

Navegación en Internet.

Capacidad de análisis y síntesis.

Manejar herramientas de software mediante menús.

Manejar comandos y funciones básicas en algún sistema operativo de computadora.

Aplicar lógica matemática en la solución de problemas informáticos. Aportación del curso al perfil profesional: La asignatura de Fundamentos de Programación aporta al perfil del Ingeniero en Tecnologías de la Información y Comunicaciones, los conocimientos, habilidades, metodología, así como capacidades de análisis y síntesis, para plantear la solución de problemas susceptibles de ser computarizados, a través de diagramas de flujo, pseudocódigo, algoritmos y el paradigma de programación orientada a objetos. Temario: I. Fundamentos de programación orientada a objetos.

I.1. Evolución de la programación I.2. Conceptos fundamentales de la Programación Orientada a Objetos I.3. Lenguajes orientados a objetos I.4. Relaciones entre clases y objetos I.5. Papel de clases y objetos en el análisis y el diseño

II. Metodología de Solución de Problemas.

II.1. Descripción del problema (enunciado) II.2. Definición de solución (especificaciones) II.3. Diseño de la solución (modelado) II.4. Desarrollo de la solución (codificación) II.5. Depuración y pruebas (pruebas) II.6. Documentación (manuales)

III. Herramientas de programación.

III.1. Simbología III.2. Reglas para la construcción de diagramas III.3. Pseudocódigo III.4. Tipos de datos y expresiones III.5. Estructuras lógicas

Page 2: Fundamentos de Programación Ver 3.pdf

2

IV. Programación orientada a objetos y modelado. IV.1. Características del modelo orientado a objetos IV.2. Elementos primordiales en el modelo de objetos IV.3. Representación gráfica del diseño IV.4. Relación entre la programación orientada a objetos y la estructurada

V. Implementación Orientada a Objetos.

V.1. Estructura de una clase V.2. Elementos de una clase V.3. Clase principal V.4. Crear objetos

VI. Modularidad.

VI.1. Declaración de métodos VI.2. Métodos de clase VI.3. Métodos de instancia

Bibliografía 1. Hjalmar Jacobson, Ivar. El Lenguaje Unificado de Modelado Guía del Usuario. 2a.

edición. Ed. Addison Wesley. 2. Flores Cueto, Juan José. Método de las 6’D UML – Pseudocódigo – Java Enfoque

Algorítmico, Serie Textos Universitarios Facultad de Ingeniería y Arquitectura. ed. Universidad de San Martín de Porres, (http://books.google.com/).

3. Joyanes Aguilar, Luis; Fernández Azuela, Matilde y Rodríguez Baena, Luis. Fundamentos de Programación Libro de Problemas Algoritmos Estructura de Datos y Objetos. 2a. edición. Ed. McGraw Hill.

4. Ramírez, Felipe. Introducción a la Programación, Algoritmos y su Implementación en Vb.Net, C#, Java y JAVA. 2a. edición. Ed. Alfaomega Grupo Editor.

5. Cairo Battistutti, Osvaldo. Metodología de la Programación, Algoritmos Diagramas de Flujo y Programas. 3a. edición. Ed. Alfaomega Grupo Editor.

6. Martin Robert, C. UML for Java(TM) Programmers. Ed. Robert C. Martin Series, Pearson. 2003.

7. Grady Booch, James. Rumbaugh E., Greg Perry. Aprendiendo Principios de Programación en 24 horas. Ed. Prentice Hall.

8. Sintes, Anthony. Aprendiendo Programación Orientada a Objetos en 21 Lecciones Avanzadas. Ed. Pearson Educación, 2002.

Fechas de Exámenes

Examen Fecha Unidades

1er I y II

2º. III y IV

3er V y VI

2ª Oportunidad

Calificación Final

Page 3: Fundamentos de Programación Ver 3.pdf

3

Criterios de evaluación y acreditación

Exámenes 60%

Productos de Aprendizaje 40% (Tareas, Trabajos, Investigaciones, etc.) Otras Observaciones:

Personificador

Hora de entrada

Asistencia a clase

2ª Oportunidad

Revisión equitativa

Page 4: Fundamentos de Programación Ver 3.pdf

4

I. Fundamentos de programación orientada a objetos.

El paradigma orientado a objetos nació en 1969 de la mano del

doctor noruego Kristin Nygaard que intentando escribir un

programa que describiera el movimiento de los barcos a través de

un fiordo, descubrió que era muy difícil simular las mareas, los

movimiento de los barcos, y las formas de las líneas costeras con

los métodos de programación existentes en ese momento.

Además descubrió que los elementos del entorno que trataba de

modelar (Barcos, Mareas y Líneas de la costa de los fiordos) así

como las acciones de cada elemento eran más fácil de manejar

utilizando otro modelo, es aquí donde surge la Programación

Orientada a Objetos (OOP de sus siglas en ingles).

I.1. Evolución de la programación

La evolución de la programación se puede sintetizar en tres modelos o paradigmas Un

paradigma es una forma establecida de pensar acerca de cómo hacer algo. En el libro “La

Revolución Científica Estructural” de Thomas Kuhn describe los paradigmas como un

conjunto de teorías, estándares y métodos que juntos representa un medio de

organización de conocimiento, es decir un medio de visualizar el mundo.

Los tres modelos o paradigmas de la evolución de la programación son:

La programación mediante procedimientos (procedural o modular)

La programación estructurada

La programación orientada a objetos

Programación Procedural o Modular

Los programas se dividen módulos (partes independientes), cada una de las cuales

ejecuta una única actividad o tarea y se codifican independientemente uno de otro. Cada

uno de estos módulos se analiza, codifica y pone a punto por separado.

Page 5: Fundamentos de Programación Ver 3.pdf

5

Cada programa contiene un modulo denominado programa principal (por ejemplo en el

lenguaje c se llama main al igual que en Java) que controla todo que sucede,

transfiriendo el control a los submódulos (subprogramas o procedimientos) y estos al

terminar transfieren el control a modulo principal. Si la tarea asignada a cada submódulo

es demasiado compleja, este podrá dividirse en otros submódulos más pequeños. Estas

tares pueden ser procesos de entrada, salida, manipulación de datos, control de otros

módulos o alguna combinación de estas.

Programación Estructurada

Se refiere a un conjunto de técnicas que han ido evolucionando

desde los primeros trabajos de Edgar Dijkstra. Esta técnica

aumenta la productividad del programa reduciendo el tiempo para

escribir, verificar, depurar y mantener los programas. La

programación estructurada utiliza un número limitado de

estructuras de control que minimiza la complejidad de los

problemas y, por consiguiente reduce los errores.

El conjunto de técnicas que incorpora la programación estructurada son:

Diseño descendente (TopDown)

Recursos Abstractos

Estructuras básicas

Diseño descendente (TopDown)

Es el proceso mediante el cual un problema se descompone en una serie de niveles o

pasos sucesivos de refinamiento. Para establecer un refinamiento pasamos de qué hace

a cómo lo hace.

Raíz

Modulo 1

Modulo 1.1

Modulo 1.2

Modulo 2

Modulo 2.1

Modulo 2.2

Modulo 2.2.1

Modulo 2.2.2

Modulo 3

Modulo 3.1

Modulo 4

Modulo 4.1

Modulo 4.2

Page 6: Fundamentos de Programación Ver 3.pdf

6

¿Qué hace?

¿Cómo lo hace?

Diseño descendente

Recursos Abstractos

La abstracción es el proceso de extraer las propiedades relevantes de un objeto al tiempo

que se ignora los detalles no esenciales. Las propiedades extraídas definen una vista del

objeto. En esencia la abstracción supone la capacidad de encapsular y aislar la

información del diseño.

Según Dijkstra, la abstracción descompone un programa en términos de recursos

abstractos, es decir, descompone una acción compleja en una serie de acciones más

simples, capaces de ser implementadas en una computadora.

Estructuras básicas

En mayo de 1966 Böhm y Jacopini demostraron que un programa puede ser escrito

utilizando solamente tres tipos de estructura de control:

Secuenciales

Selectivas

Repetitivas

Page 7: Fundamentos de Programación Ver 3.pdf

7

Secuenciales

La estructura secuencial es aquella en la que una acción (instrucción) sigue a otra en

secuencia.

Diagrama de Flujo Diagrama NassiSchneiderman

(NS) Pseudocódigo

Inicio Acción 1 Acción 2 … Acción n

Fin

Selectivas

Diagrama de Flujo

Acción 1

Acción 2

...

Acción n

Inicio

Fin

Inicio

Acción 1

Acción 2

...

Acción n

Fin

Condición

Acción 1

Verdadero Falso

Page 8: Fundamentos de Programación Ver 3.pdf

8

Diagrama NassiSchneiderman (NS)

Pseudocódigo

Si Condición

Acción 1 Fin Si

Diagrama de Flujo

Diagrama NassiSchneiderman (NS)

Acción 1

Condición

FalsoVerdadero

Condición

Acción 1

Verdadero Falso

Acción 2

Acción 1

Condición

FalsoVerdadero

Acción 2

Page 9: Fundamentos de Programación Ver 3.pdf

9

Pseudocódigo

Si Condición

Acción 1 En otro caso

Acción 2 Fin Si

Repetitivas

Diagrama de Flujo

For/Next

While/Mientras

Repeat/Repite

Diagrama NassiSchneiderman (NS)

For/Next

While/Mientras

Condición

Inc/Dec

Inicio

Proceso

Condición

Proceso Verdadero

Falso

Condición

Proceso

Verdadero

Falso

Inc/Dec

Inicio

Proceso

While Condición

Proceso

Page 10: Fundamentos de Programación Ver 3.pdf

10

Repeat/Repite

Pseudocódigo

For/Next

Para I = VI Hasta VF Proceso

Fin Para

While/Mientras

Mientras Condición Proceso

Fin Mientras

Repeat/Repite Repite

Proceso Hasta Condición

I.2. Conceptos fundamentales de la Programación Orientada a Objetos

La programación orientada a objetos, tal vez el paradigma de programación más utilizado

en el mundo del desarrollo de software y de la ingeniería de software del siglo XXI, trae un

nuevo enfoque a los retos que se plantean en la programación estructurada cuando los

problemas a resolver son complejos. Al contrario que la programación procedimental que

enfatiza en los algoritmos, la programación orientada a objetos (POO) enfatiza en los

datos. En lugar de intentar ajustar un problema al enfoque procedimental de un lenguaje,

POO intenta ajustar el lenguaje al problema. La idea es diseñar formatos de datos que se

correspondan con las características esenciales de un problema.

La idea fundamental de los lenguajes orientados a objetos es combinar en una única

unidad o módulo, tanto los datos como las funciones que operan a esos datos. Tal unidad

se llama “Objeto”. A las operaciones que realiza un objeto se les llama “Métodos” y es el

Repeat Condición

Proceso

Page 11: Fundamentos de Programación Ver 3.pdf

11

único medio para acceder a sus datos. Los datos de un objeto, se conocen también como

“Atributos”. Si se desea leer datos de un objeto, se invoca a uno de sus Método. No se

puede acceder a los datos directamente, se debe de realizar por medio de los

mecanismos de “Comportamiento” (Métodos). Los datos son ocultos, de modo que

están protegidos de alteraciones accidentales. Los datos y los Métodos se dice que están

“Encapsulados” en una única entidad. El “Encapsulamiento” de datos y la “Ocultación”

de los datos son términos clave en la descripción de lenguajes orientados a objetos.

Si se desea modificar los datos de un objeto, se debe de conocer exactamente cuáles son

funciones que interactúan con los Métodos para poder realizar esta acción. Un programa

en Java se compone normalmente de un número de objetos que se comunican unos con

otros mediante “Mensajes” funciones miembro (Métodos). La organización de un

programa en Java se muestra en la siguiente figura. La llamada a una función miembro de

un objeto se denomina enviar un mensaje a otro objeto.

En el paradigma orientado a objetos, el programa se organiza como un conjunto finito de

objetos que contiene datos y operaciones (función miembro o Métodos) que llaman a esos

datos y que se comunican entre sí mediante Mensajes.

Datos

Función Miembro(Método)

Función Miembro(Método)

Objeto A

Datos

Función Miembro(Método)

Función Miembro(Método)

Objeto B

Datos

Función Miembro(Método)

Función Miembro(Método)

Objeto C

Mensaje

Mensaje

Mensaje

Page 12: Fundamentos de Programación Ver 3.pdf

12

Propiedades fundamentales de la orientación a objetos

Existen diversas características ligadas a la orientación a objetos. Todas las propiedades

que se suelen considerar, no son exclusivas de este paradigma, ya que pueden existir en

otros paradigmas, pero en su conjunto definen claramente los lenguajes orientados a

objetos. Estas propiedades son:

Abstracción

Clase

Objeto

Encapsulación

Ocultamiento

Herencia

Polimorfismo

Mensajes

Abstracción

La abstracción es la propiedad de los objetos que consiste en tener en cuenta sólo los

aspectos más importantes desde un punto de vista determinado y no tener en cuenta los

restantes aspectos. El término abstracción que se suele utilizar en programación se

refiere al hecho de diferenciar entre las propiedades externas de una entidad y los

detalles de la composición interna de dicha entidad. Es la abstracción la que permite

ignorar los detalles internos de un dispositivo complejo tal como una computadora, un

automóvil, una lavadora o un horno de microondas, etc., y usarlo como una única unidad

comprensible. Mediante la abstracción se diseñan y fabrican estos sistemas complejos en

primer lugar y, posteriormente, los componentes más pequeños de los cuales están

compuestos. Cada componente representa un nivel de abstracción en el cual el uso del

componente se aísla de los detalles de la composición interna del componente. La

abstracción posee diversos grados denominados niveles de abstracción.

Nivel de abstracción Externo:

Page 13: Fundamentos de Programación Ver 3.pdf

13

Nivel de abstracción Conceptual:

Nivel de abstracción Interno:

En consecuencia, la abstracción posee diversos grados de complejidad que se

denominan niveles de abstracción que ayudan a estructurar la complejidad intrínseca que

poseen los sistemas del mundo real. En el modelado orientado a objetos de un sistema

esto significa centrarse en qué es y qué hace un objeto y no en cómo debe

implementarse. Durante el proceso de abstracción es cuando se decide qué

características y comportamiento debe tener el modelo.

Aplicando la abstracción se es capaz de construir, analizar y gestionar sistemas de

computadoras complejos y grandes que no se podrían diseñar si se tratara de modelar a

un nivel detallado. En cada nivel de abstracción se visualiza el sistema en términos de

componentes, denominados herramientas abstractas, cuya composición interna se ignora.

Esto nos permite concentrarnos en cómo cada componente interactúa con otros

componentes y centrarnos en la parte del sistema que es más relevante para la tarea a

realizar en lugar de perderse a nivel de detalles menos significativos.

Page 14: Fundamentos de Programación Ver 3.pdf

14

En estructuras o registros, las propiedades individuales de los objetos se pueden

almacenar en los miembros. Para los objetos es de interés cómo están organizados sino

también qué se puede hacer con ellos. Es decir, las operaciones que forman la internan

de un objeto son también importantes. El primer concepto en el mundo de la orientación a

objetos nació con los tipos abstractos de datos (TAD). Un tipo abstracto de datos describe

no sólo los atributos de un objeto, sino también su comportamiento (las operaciones).

Esto puede incluir también una descripción de los estados que puede alcanzar un objeto.

Un medio de reducir la complejidad es la abstracción. Las características y los procesos

se reducen a las propiedades esenciales, son resumidas o combinadas entre sí. De este

modo, las características complejas se hacen más manejables.

Clase

En términos prácticos, una clase es un tipo definido por el usuario. Las clases son los

bloques de construcción fundamentales de los programas orientados a objetos. Booch

define una clase como “un conjunto de objetos que comparten una estructura y un

comportamiento comunes”. Una clase contiene la especificación de los datos que

describen un objeto junto con la descripción de las acciones que un objeto conoce cómo

ha de ejecutar. Estas acciones se conocen como servicios o métodos. Una clase incluye

también todos los datos necesarios para describir los objetos creados a partir de la clase.

Estos datos se conocen como atributos, variables o variables instancia. El término atributo

se utiliza en análisis y diseño orientado a objetos, y el término variable instancia se suele

utilizar en programas orientados a objetos.

Declaración de un a clase

Antes de que un programa pueda crear objetos de cualquier clase, ésta debe ser definida.

La definición de una clase significa que se debe dar a la misma un nombre, dar nombre

también a los elementos que almacenan sus datos y describir los métodos que realizarán

las acciones consideradas en los objetos.

Las definiciones o especificaciones no son un código de programa ejecutable. Se utilizan

para asignar almacenamiento a los valores de los atributos usados por el programa y

reconocer los métodos que utilizará el programa. Normalmente, se sitúan en archivos

formando los denominados packages, se utiliza un archivo para varias clases que están

relacionadas.

Formato:

class NombreClase

{

lista_de_miembros

}

Page 15: Fundamentos de Programación Ver 3.pdf

15

En el Lenguaje Unificado de Modelado (UML, Unifield Modeling Language), una clase es

representada por un rectángulo que posee tres divisiones:

En donde:

La parte superior: Contiene el nombre de la Clase

La intermedia: Contiene los atributos (o variables de instancia) que

caracterizan a la Clase.

La parte Inferior: Contiene los métodos u operaciones, los cuales son la forma

como interactúa el objeto con su entorno.

Atributos y Métodos:

Atributos:

Los atributos o características de una Clase pueden ser de tres tipos, los que definen el

grado de comunicación y visibilidad de ellos con el entorno, estos son:

public (+, ): Indica que el atributo será visible tanto dentro como fuera de

la clase, es decir, es accesible desde todos lados.

private (-, ): Indica que el atributo sólo será accesible desde dentro de la

clase (sólo sus métodos lo pueden accesar).

protected (#, ): Indica que el atributo no será accesible desde fuera de la

clase, pero si podrá ser accesado por métodos de la clase

además de las subclases que se deriven (herencia).

defecto Si no especifica ningún tipo de acceso, se utiliza el acceso

por defecto, esto significa que la variable es accesible a

todas las clases contenidas en le mismo paquete.

Nombre de la clase

Atributos

Comportamiento

Page 16: Fundamentos de Programación Ver 3.pdf

16

Métodos:

Cada método tiene asociado un tipo que se utiliza para controlar el acceso al método.

Entre estos se encuentra:

public (+, ): Indica que el método será visible tanto dentro como fuera de

la clase, es decir, es accsesible desde todos lados.

private (-, ): Indica que el método sólo será accesible desde dentro de la

clase (sólo otros métodos de la clase lo pueden accesar).

protected (#, ): Indica que el método no será accesible desde fuera de la

clase, pero si podrá ser accesado por métodos de la clase

además de métodos de las subclases que se deriven

(herencia).

defecto Si no especifica ningún tipo de acceso, se utiliza el acceso

por defecto, esto significa que el método es accesible a

todas las clases contenidas en el mismo paquete.

Ejemplo:

class Punto

{

private int x; // coordenada x

private int y; // coordenada y

+ Punto()+ Punto(int valorX, int Valory)+ int regresaX()+ int regresaY()+ void asignaX(int valorX)+ void asignaY(int valorY)

Punto

- int x;- int y;

Page 17: Fundamentos de Programación Ver 3.pdf

17

public Punto() // constructor sin argumentos

{

x = 0;

y = 0;

}

public Punto(int valorX , int valorY) // constructor

{

x = valorX;

y = valorY;

}

public int regresaX() // devuelve el valor de x

{

return x;

}

public int regresaY() // devuelve el valor de y

{

return y;

}

void asignaX(int valorX) // establece el valor de x

{

x = valorX;

}

void asignaY(int valorY) // establece el valor de y

{

y = valorY;

}

}

Objeto

En el mundo real, las personas identifican los objetos como cosas que pueden ser

percibidas por los cinco sentidos. Los objetos tienen propiedades específicas, como

posición, tamaño, color, forma, textura, etc. que definen su estado. Los objetos también

poseen ciertos comportamientos que los hacen diferentes de otros objetos.

Booch define un objeto como “algo que tiene un estado, un comportamiento y una

identidad”.

Imaginemos una máquina de una fábrica. El estado de la máquina puede estar

funcionando/ parando (“on/off”), hay que tener en cuenta su potencia, velocidad máxima,

velocidad actual, temperatura, etc. Su comportamiento puede incluir acciones para

arrancar y parar la máquina, obtener su temperatura, activar o desactivar otras máquinas,

conocer las condiciones de señal de error o cambiar la velocidad. Su identidad se basa en

Page 18: Fundamentos de Programación Ver 3.pdf

18

el hecho de que cada instancia de una máquina es única, tal vez identificada por un

número de serie. Las características que se eligen para enfatizar el estado y el

comportamiento se apoyarán en cómo un objeto máquina se utilizará en una aplicación.

En un diseño de un programa orientado a objetos, se crea una abstracción (un modelo

simplificado) de la máquina basada en las propiedades y en el comportamiento que son

útiles en el tiempo.

Martin y Odell definen un objeto como “cualquier cosa, real o abstracta, en la que se

almacenan datos y aquellos métodos (operaciones) que manipulan los datos”.

Para realizar esa actividad, se añaden a cada objeto de la clase los propios datos

asociados con sus propios métodos miembro que pertenecen a la clase.

Un mensaje es una instrucción que se envía a un objeto y que, cuando se recibe, ejecuta

sus acciones. Un mensaje incluye un identificador que contiene la acción que ha de

ejecutar el objeto junto con los datos que necesita el objeto para realizar su trabajo. Los

mensajes, por consiguiente, forman una ventana del objeto al mundo exterior.

El usuario de un objeto se comunica con el objeto mediante su interfaz, un conjunto de

operaciones definidas por la clase del objeto de modo que sean todas visibles al

programa. Una interfaz se puede considerar como una vista simplificada de un objeto. Por

ejemplo, un dispositivo electrónico como una máquina de fax tiene una interfaz de usuario

bien definida; por ejemplo, esa interfaz incluye el mecanismo de avance del papel,

botones de marcado, el receptor y el botón “enviar”. El usuario no tiene que conocer cómo

está construida la máquina internamente, el protocolo de comunicaciones u otros detalles.

De hecho, la apertura de la máquina durante el periodo de garantía puede anularla.

La representación gráfica de un objeto en UML:

Objeto : Clase X

Atributo1 = Expresión…

Método ()…

Objeto : Clase X

(b) Notación reducida de un objeto

(a) Notación completa de un objeto

Page 19: Fundamentos de Programación Ver 3.pdf

19

Encapsulación

El encapsulado o encapsulación de datos es el proceso de agrupar datos y operaciones

relacionadas bajo la misma unidad de programación. En el caso de los objetos que

poseen las mismas características y comportamientos se agrupan en clases, que no son

más que unidades o módulos de programación que encapsulan datos y operaciones.

Ocultamiento

La ocultación de datos permite separar el aspecto de un componente, definido por su

interfaz con el exterior, de sus detalles internos de implementación.

Diferencia entre Encapsulación y Ocultamiento

Los términos ocultación de la información y encapsulación de datos se suelen utilizar

como sinónimos, pero no siempre es así, y muy al contrario, son términos similares pero

distintos. En Java no es lo mismo, ya los datos internos están protegidos del exterior y no

se pueden acceder a ellos más que desde su propio interior y por tanto, no están ocultos.

El acceso al objeto está restringido sólo a través de una interfaz bien definida.

Herencia

Las clases no están aisladas, sino que se relacionan entre sí, formando una jerarquía de

clasificación. Los objetos heredan las propiedades y el comportamiento de todas las

clases a las que pertenecen. La herencia organiza y facilita el polimorfismo y el

encapsulamiento permitiendo a los objetos ser definidos y creados como tipos

especializados de objetos preexistentes. Estos pueden compartir (y extender) su

comportamiento sin tener que volver a implementarlo. Esto suele hacerse habitualmente

agrupando los objetos en clases y estas en árboles o enrejados que reflejan un

Porsche911 : Carro

Color = “Amarillo”…

ArrancarMotor ()…

Marco : Alumno

(d) Objeto Marco de la clase Alumno

(c) Objeto Porsche911 de la clase Carro

Page 20: Fundamentos de Programación Ver 3.pdf

20

comportamiento común. Cuando un objeto hereda de más de una clase se dice que hay

herencia múltiple.

Polimorfismo

La quinta propiedad significativa de los lenguajes de programación orientados a objetos

es el polimorfismo. Es la propiedad que indica, literalmente, la posibilidad de que una

entidad tome muchas formas. En términos prácticos, el polimorfismo permite referirse a

objetos de clases diferentes mediante el mismo elemento de programa y realizar la misma

operación de diferentes formas, según sea el objeto que se referencia en ese momento.

Por ejemplo, cuando se describe la clase mamíferos se puede observar que la operación

comer es una operación fundamental en la vida de los mamíferos, de modo que cada tipo

de mamífero debe poder realizar la operación o función comer. Por otra parte, una cabra o

una vaca que pastan en un campo, un niño que se come un caramelo y un león que

devora a otro animal, son diferentes formas que utilizan diferentes mamíferos para realizar

la misma función (comer).

El polimorfismo adquiere su máxima expresión en la derivación o extensión de clases, es

decir, cuando se obtiene una clase a partir de una clase ya existente, mediante la

propiedad de derivación de clases o herencia.

I.3. Lenguajes orientados a objetos

Históricamente el lenguaje Simula (1967) es aceptado como el primer lenguaje que posee

las características principales de un lenguaje orientado a objetos. Fue creado para hacer

programas de simulación, en donde los "objetos" son la representación de la información

más importante. Smalltalk (1972 a 1980) es posiblemente el ejemplo canónico, y con el

que gran parte de la teoría de la programación orientada a objetos se ha desarrollado.

El lenguaje de programación C fue desarrollado por Dennis Ritche de AT&T en los

Laboratorios Bell que se utilizó para escribir y mantener el sistema operativo UNIX (hasta

que apareció C, el sistema operativo UNIX fue desarrollado por Ken Thompson en AT&T

mediante en lenguaje ensamblador o en lenguaje B). C es un lenguaje de propósito

COBOL ALGOL APL PASCAL

GPSS PROLOG

Lenguaje Maquina

1950 1960 1970 1980 2000

Declarativos

Imperativos

Orientados a Objetos

Funcional

FORTRAN BASIC C ADA

SMALLTALK VISUAL BASIC JAVA

C#

LISP LM SCHEMA

1990

C++

Page 21: Fundamentos de Programación Ver 3.pdf

21

general que se puede utilizar para escribir cualquier tipo de programa, pero su éxito y

popularidad está especialmente relacionado con el sistema operativo UNIX. Fue

desarrollado como lenguaje de programación de sistemas, es decir, un lenguaje de

programación para escribir sistemas operativos.

Entre los lenguajes orientados a objetos se destacan los siguientes:

Ada

C#

Clipper

Object Pascal (Delphi)

Gambas

Eiffel

Java

JavaScript

ObjectiveC

R

Perl

PHP

PowerBuilder

Python

Ruby

Smalltalk

VB.NET

Visual FoxPro

Visual Basic

Visual Objects

XBase++

I.4. Relaciones entre clases y objetos

Ahora ya definido el concepto de Clase, es necesario explicar cómo se pueden

interrelacionar dos o más clases (cada uno con características y objetivos diferentes).

Antes es necesario explicar el concepto de cardinalidad de relaciones: En UML, la

cardinalidad de las relaciones indica el grado y nivel de dependencia, se anotan en cada

extremo de la relación y éstas pueden ser:

uno o muchos: 1..* (1..n)

0 o muchos: 0..* (0..n)

número fijo: m (m denota el número).

Ejemplo:

Un cliente puede tener asociadas muchas Órdenes de Compra, en cambio una orden de

compra solo puede tener asociado un cliente.

Page 22: Fundamentos de Programación Ver 3.pdf

22

Ejercicios:

En los Institutos Tecnológicos cuenta con una plantilla de Catedráticos de entre 30 a 350

maestros y una población Estudiantil de entre 100 y 500 alumnos. Cada Catedrático

imparte clase a grupos de entre 5 a 45 Estudiantes.

Análisis Orientado a Objetos (AOO)

a) Identifique las clases y proporcione una breve descripción

Clases Descripción

b) Por cada clase describa los atributos o características, descripción de cada

concepto y el conjunto de valores permitidos (Dominio).

Clase Atributo Descripción Dominio

c) Describa el comportamiento que tendrá cada clase y su descripción

Clase Comportamiento Descripción

Page 23: Fundamentos de Programación Ver 3.pdf

23

Diseño Orientado a Objetos (DOO)

d) Ahora desarróllelos como clase

e) Establezca la relación entre las clases

Producto de Aprendizaje 1:

De los siguientes conceptos seleccione 10 y desarróllelo como clase, una vez

desarrolladas como clase relacione tres mediante cardinalidad, entregarlo de forma

impresa (25 puntos). Exponer en clase las tres clases relacionadas (15 puntos).

1 Actor 21 Empleado 41 Notebook

2 Avión 22 EquipoSonido 42 Pantalón

3 Blusa 23 Escuela 43 Periódico

4 Camión 24 Estadio 44 Persona

5 Camioneta 25 Estudiante 45 Pickup

6 Camisa 26 Fabrica 46 Pluma

7 Carro 27 Farmacia 47 Portafolio

8 Casa 28 Fraccionamiento 48 Profesionista

9 Catedrático 29 Hospital 49 ProgramaRadio

10 CertificadoMédico 30 Ingeniero 50 ProgramaTV

11 CertificadoCalifiaciones 31 Lápiz 51 Revista

12 Coche 32 Laptop 52 Supermercado

13 Computadora 33 Libro 53 Teléfono

14 Cuaderno 34 Licenciado 54 Terreno

15 Cuenta 35 Maestro 55 Tienda

16 CuentaAhorros 36 Mascota 56 Universidad

17 CuentaBancaria 37 Medico 57 Vehículo

18 CuentaCrédito 38 Mochila 58 Ventana

19 Director 39 Modulo 59 Vestido

20 Doctor 40 Museo 60 Zapato

Page 24: Fundamentos de Programación Ver 3.pdf

24

Cada clase deberá tener los siguientes términos:

Nombre de clase

Atributos y Descripción

Comportamiento y Descripción

Para las tres clases establezca:

Relación de las Clases

Programación Orientada a Objetos (POO)

Programar las clases en un lenguaje orientado a objetos.

I.5. Papel de clases y objetos en el análisis y el diseño

Durante el análisis y las primeras etapas del diseño, el desarrollador tiene dos tareas

principales:

Identificar las clases y objetos que forman el vocabulario del dominio del

problema.

Idear los comportamientos de las clases para que satisfagan los requerimientos

del problema.

En conjunto, se llama a esas clases y objetos las abstracciones del problema, y se

denomina a esas estructuras cooperativas los mecanismos de la implantación. Durante

estas fases del desarrollo, el interés principal del desarrollo debe estar en la vista externa

de estas abstracciones y mecanismos.

Esta vista representa el marco de referencia lógico del sistema y, por tanto, abarca la

estructura de clases y la estructura de objetos del mismo. En las etapas finales del diseño

y entrando ya en la implantación, la tarea del desarrollador cambia: el centro de atención

está en la vista interna de estas abstracciones y mecanismos, involucrando a su

representación física. Pueden expresarse estas decisiones de diseño como parte de la

arquitectura de módulos y la arquitectura de procesos del sistema.

La experiencia de algunos analistas nos lleva a aplicar en primer lugar el criterio orientado

a objetos porque esta aproximación es mejor a la hora de servir de ayuda para organizar

la complejidad innata de los sistemas de software, al igual que ha servido de ayuda para

describir la complejidad organizada de sistemas complejos tan diversos como las

computadoras, plantas, galaxias o grandes instituciones sociales.

Page 25: Fundamentos de Programación Ver 3.pdf

25

Básicamente los productos del análisis orientado a objetos (AOO) sirven como modelos

de los que se puede partir para un diseño orientado a objetos (DOO); los productos del

diseño orientado a objetos pueden utilizarse entonces como anteproyectos para la

implementación completa de unos sistemas utilizando métodos de programación

orientado a objetos (POO), de esta forma se relacionan AOO, DOO y POO.

Page 26: Fundamentos de Programación Ver 3.pdf

26

II. Metodología de Solución de Problemas.

La principal razón por lo que las personas aprenden a programar es para solucionar

problemas utilizando como herramienta la computadora. El proceso de resolución de un

problema con una computadora conduce a la escritura de un programa y a su ejecución.

Aunque el proceso de diseñar programas es, esencialmente, creativo, se puede

considerar una serie de fases o pasos comunes, que generalmente deben seguir todos

los programadores.

Las fases de resolución de un problema con computadora son:

Análisis del problema El problema es analizado teniendo presente las

especificaciones de los requisitos dados por el cliente de la

empresa o la persona que encarga el programa. AOO

Diseño del algoritmo Una vez analizado el problema, se diseña una solución que

conducirá a un algoritmo que resuelva el problema. DOO

Codificación La solución se escribe en un lenguaje de alto nivel y se

obtiene el programa fuente. POO

Ejecución, verificación y depuración El programa se ejecuta (se corre), se verifica que

realice correctamente que realice lo que se analizo y diseño,

y se depuran todos los errores.

Implementación Se pone en producción el programa (gradual, parcial o total)

Mantenimiento El programa se actualiza realizando los cambios que sean

necesarios, de modo que cumpla con las necesidades del

usuario.

Documentación Escritura de las diferentes fases del ciclo de vida del

software esencialmente del análisis, diseño y codificación

(Manuales del usuario y Manuales del programador (o

Manuales del Sistema)).

II.1. Descripción del problema (enunciado)

La resolución de problemas se puede dividir en tres fases importantes:

Análisis del problema

Diseño del algoritmo

Resolución del algoritmo en la computadora

Page 27: Fundamentos de Programación Ver 3.pdf

27

II.2. Definición de solución (especificaciones)

El propósito del análisis de un problema es ayudar al programador para llegar a una cierta

compresión de la naturaleza del problema. El problema debe estar bien definido, si se

desea llegar a una solución satisfactoria. Para poder definir con precisión el problema se

requiere de las especificaciones de entrada y salida descritas en detalle.

El análisis del problema requiere de una lectura previa del problema, a fin de obtener una

idea general de lo que solicita. La segunda lectura deberá servir para responder a las

siguientes preguntas:

¿Qué datos necesita para resolver el problema? (Entrada)

¿Qué información debe de proporcionar la resolución del problema? (Salida)

¿Qué pasos se requieren para que con los datos de entrada se transformen en

información de salida? (Algoritmo)

Resolución de un problema

Análisis del problema

Diseño del Algoritmo

Resolución del problema con la

computadora

Análisis del problema

Definición del problema

Especificaciones de entrada

Especificaciones de salida

Page 28: Fundamentos de Programación Ver 3.pdf

28

Ejemplo:

Definición del problema: Obtenga la superficie y la longitud de un circulo.

Análisis:

Entrada: ¿Qué datos necesita para resolver el problema?

Radio

Salida: ¿Qué información debe de proporcionar la resolución del problema?

Superficie y Longitud

Algoritmo: ¿Qué pasos se requieren para que con los datos de entrada se

transformen en información de salida? (Unidad III)

II.3. Diseño de la solución (modelado)

Una computadora no tiene la capacidad para resolver problemas, más que cuando se le

proporcionan los pasos sucesivos a realizar para solucionar dicho problema. Estos pasos

indican las instrucciones a ejecutar por la maquina, conociéndoseles como algoritmo.

La información que se le proporciona al algoritmo constituye la entrada y la información

producida por el algoritmo constituye la salida.

Ejercicio: Desarrolle el diseño de la solución del siguiente problema.

Calcule el salario neto de un trabajador a partir de la lectura del nombre, horas trabajadas,

precio por hora y el cálculo de impuesto son el 25% del salario bruto (horas trabajadas por

precio por hora). Como resultado final imprima el nombre, salario bruto, impuestos y

salario neto.

Superficie y Longitud de

un circulo

Entrada de datos

Radio

Calculo de la Superficie

S=Radio2

Calculo de la longitud

L=2Radio

Salida de resultados

S y L

Page 29: Fundamentos de Programación Ver 3.pdf

29

II.4. Desarrollo de la solución (codificación)

La codificación es la escritura en un lenguaje de programación de la representación del

algoritmo desarrollada en las etapas precedentes. Dado que el diseño de un algoritmo es

independiente del lenguaje de programación utilizado para la implementación, el código

puede ser escrito con igual facilidad en un lenguaje o en otro.

Para realizar la conversión del algoritmo en programa se debe utilizar las instrucciones y

sentencias diseñadas en el lenguaje de programación y siguiendo los pasos del algoritmo.

II.5. Depuración y pruebas (pruebas)

La prueba de los programas consiste en ejecutar el programa utilizando datos similares a

los reales o en su caso datos reales y observar los resultados arrojados por el sistema,

tratando de depurar los errores de sintaxis, los errores de ejecución y los errores lógicos:

Errores de sintaxis. Ocurren cuando una o varias sentencias violan una o más

reglas gramaticales de lenguaje de programación.

Errores de ejecución. Son errores que producen una terminación anómala o una

terminación no esperada en tiempo de ejecución, por ejemplo una división por

cero.

Error lógico. Es cuando un programa no realiza la operación que estaba prevista.

II.6. Documentación (manuales)

Todos los sistemas independientemente de su aplicación tienen una documentación

asociada. Esta se clasifica en 2 grupos:

Documentación del usuario

Documentación del sistema

Documentación del usuario

Contiene información relevante para la persona que manejara el sistema y contiene los

siguientes tópicos:

o Requerimientos de hardware y software

o Instalación y configuración del sistema

o Explicación del funcionamiento del sistema

o Manual de referencias (informes de errores en forma detallada)

Page 30: Fundamentos de Programación Ver 3.pdf

30

Documentación del sistema

Son todos los documentos relacionados con la aplicación del sistema, desde las

especificaciones de los requisitos hasta el plan de pruebas de la depuración.

Este tipo de documentación puede incluir los siguientes temas:

o Lenguaje de programación utilizado para el desarrollo del sistema (Compañía,

versión, etc.)

o Por cada procedimiento, función o método, una descripción de su funcionamiento,

describiendo a detalle los parámetros que recibe así como la salida que produce.

o Plan de pruebas (por modulo, por unidad de programa, por sistema).

Los siguientes problemas realice su correspondiente análisis:

1. Obtenga la superficie de un triangulo

2. Obtenga el total a pagar aplicando un descuento del 5%.

3. Obtenga los valores de X1 y X2 para resolver ecuaciones de segundo grado:

4. De los valores a y b, obtenga cuantas veces cabe el valor b en el valor a.

5. Obtenga la suma de los números del 1 al 100

Producto de Aprendizaje 2: De los siguientes problemas realice el análisis (40

puntos).

1. Obtenga el cuadrado de 243

2. Obtenga el perímetro y la superficie de un cuadrado

3. Obtenga la suma de dos números

4. Obtenga el producto de dos números

5. Obtenga la resta de dos números

6. Obtenga la división de dos números

7. Obtenga el cuadrado de un numero

8. Obtenga el perímetro de un rectángulo

Page 31: Fundamentos de Programación Ver 3.pdf

31

9. Obtenga la hipotenusa de un triangulo rectángulo

10. Obtenga el área y el volumen de un cilindro

11. Obtenga la conversión de grados Celsius a grados Fahrenheit

12. Obtenga la conversión de grados Fahrenheit a grados Celsius

13. Obtenga el área de un triangulo en función de las longitudes de sus lados:

Donde:

14. Dado x numero de metros convertirlos a pies y pulgadas (1 metro = 39.37

pulgadas, 1 pie = 12 pulgadas)

15. Obtenga el salario de un obrero en base a las horas extras trabajadas

16. Obtenga la fuerza de atracción entre dos masas m1 y m2 separadas por una

distancia d:

Donde G es la constante de gravitación universal:

Page 32: Fundamentos de Programación Ver 3.pdf

32

III. Herramientas de programación.

Para la representación de algoritmos se debe utilizar algún método que permita la

independización del lenguaje de programación elegido para su ejecución. Para conseguir

este objetivo se precisa que el algoritmo sea representado gráficamente o

numéricamente. Los métodos más utilizados para la representación de algoritmos son:

Diagramas de Flujo

Diagrama NassiSchneiderman (NS)

Lenguaje de especificación de algoritmos (Pseudocódigo)

III.1. Simbología

Diagramas de Flujo

EL diagrama de flujo (Flowchart) es una de las técnicas de representación de algoritmos

más antigua y a la vez más utilizada. Un diagrama de flujo (DF) es un diagrama que utiliza

cajas y líneas que indican el flujo de la información.

Símbolo Función

Inicio/Fin. Comienzo y último símbolo de los diagramas de flujos.

Entrada. Se especifican los datos de entrada del algoritmo.

Page 33: Fundamentos de Programación Ver 3.pdf

33

Símbolo Función

Salida. Se especifican los datos de salida del algoritmo.

Proceso. Se especifica cualquier tipo de operación expresión matemáticas (calculo, almacenamiento, transferencia)

Conector. Enlaza diferentes partes del diagrama de flujo

Fechas. Indican el flujo de datos en el algoritmo

Diagrama NassiSchneiderman (NS)

El diagrama NS también conocido como diagrama Chapin, es semejante al DF pero sin

flechas de dirección, por lo cual utiliza un rectángulo para representar los pasos del

algoritmo.

Pseudocódigo

Esta técnica es una combinación entre lenguaje natural y lenguaje de alto nivel.

Inicio

Acción 1

Acción 2

Acción n

Fin

III.2. Reglas para la construcción de diagramas

Diagramas de Flujo

Los diagramas de flujo comienzan con el símbolo de inicio/fin

indicando el comienzo del diagrama:

Y terminan con el símbolo de inicio/fin indicando el término del

diagrama:

Inicio

Fin

Page 34: Fundamentos de Programación Ver 3.pdf

34

Entre los símbolos de inicio/fin se ponen las acciones (asignación, proceso, entrada,

salida, etc.) que forman parte del diagrama.

Diagrama NassiSchneiderman (NS)

Para este tipo de diagrama se utiliza un rectángulo, en el cual comienza con la leyenda

Inicio y termina con la leyenda Fin. Entre estos dos recuadros de desarrolla el contenido

del algoritmo.

Ejercicio:

Definición del problema: Obtenga la superficie y la longitud de un circulo.

Acción 1

Acción 2

...

Acción n

Inicio

Fin

Inicio

Acción 1

Acción 2

...

Acción n

Fin

Page 35: Fundamentos de Programación Ver 3.pdf

35

Análisis:

Entrada: Radio

Salida: Superficie, Longitud

Algoritmo:

Diagrama de Flujo Diagrama NS

III.3. Pseudocódigo

En este tipo de representación se comienza con la leyenda Inicio y termina con Fin y entre

los términos de comienzo y terminación se escribe el desarrollo del algoritmo.

Inicio

Leer Radio

Superficie= *Radio^2

Longitud=2* *Radio

Imprimir Superficie, Longitud

Fin

Inicio

Fin

Superficie= π *Radio^2

Longitud=2*π *Radio

Leer Radio

Superficie, Longitud

Inicio

Leer Radio

Superficie=π *Radio^2

Longitud=2*π *Radio

Imprimir

Superficie, Longitud

Fin

Page 36: Fundamentos de Programación Ver 3.pdf

36

Ejercicios:

1. Calcule el salario neto de un trabajador a partir de la lectura del nombre, horas

trabajadas, precio por hora y el cálculo de impuesto son el 25% del salario bruto

(horas trabajadas por precio por hora). Como resultado final imprima el nombre,

salario bruto, impuestos y salario neto.

2. Obtenga la superficie de un triangulo

3. Obtenga el total a pagar aplicando un descuento del 5%.

4. Obtenga los valores de X1 y X2 para resolver ecuaciones de segundo grado:

5. De los valores a y b, obtenga cuantas veces cabe el valor b en el valor a.

6. Obtenga la suma de los números del 1 al 100.

7. Diseñar el algoritmo que lea el valor correspondiente a una distancia en millas

marinas y las escriba expresadas en metros. Sabiendo que 1 milla marina equivale

a 1852 metros.

8. Elabore un algoritmo que lea dos valores y los intercambie.

Estructura selectivas

Las estructuras selectivas se utilizan para forma decisiones lógicas. En las estructuras se

evalúa una condición y en función del resultado se puede realizar una acción u otra.

Estructuras selectivas simples

Diagrama de Flujo Diagrama NS

Condición

Acción 1

Verdadero Falso

Acción 1

Condición

FalsoVerdadero

Page 37: Fundamentos de Programación Ver 3.pdf

37

Pseudocódigo

Si Condición

Acción 1 Fin Si

9. La tienda “Artículos de Limpieza S.A. de C.V.” realiza un descuento del 5% a todas

las compras mayores a 2500.00 pesos. Elabore un algoritmo que resuelva este

problema.

10. La empresa “Electrónica Digital” desea un programa que determine si una persona

es solvente económicamente en base a los ingresos y los gastos; si los ingresos

son mayores a los gastos la persona es solvente. Elabore un algoritmo que

resuelva este problema.

11. En la clínica “Salud Eterna” desean un programa que determine si una persona

está enferma en base a su temperatura corporal; si la temperatura corporal es

mayor a 36.5 el programa debe mandar un mensaje que diga “Enfermo”.

Estructuras selectivas dobles

Diagrama de Flujo Diagrama NS

Pseudocódigo

Si Condición

Acción 1 En otro caso

Acción 2 Fin Si

12. Escriba un algoritmo que calcule el total a pagar en una tienda departamental, si la

compra excede de 15,000 pesos se concede un descuento del 10%, en caso

contrario el descuento es del 5%.

13. Elabora un algoritmo que en base a dos números imprima el mayor.

Condición

Acción 1

Verdadero Falso

Acción 2

Acción 1

Condición

FalsoVerdadero

Acción 2

Page 38: Fundamentos de Programación Ver 3.pdf

38

14. Elabore un algoritmo que en base a tres números imprima el mayor.

15. Elabore un algoritmo que en base a cuatro números, los imprima en forma

descendente.

Estructuras de selección múltiple

En la vida se presentan problemas en los cuales presentan más de dos alternativas como

posibilidades y eso se soluciona con estructuras de selección múltiple.

Diagrama de Flujo

Diagrama NS

Pseudocódigo

Según sea Selector hacer

1: Acción 1 2: Acción 2

… n: Acción n

En otro caso: Acción OC

Fin Según

16. Elabore un algoritmo que en base al número del mes imprima el mes

correspondiente como cadena de caracteres.

Selector

Acción 1 Acción nAcción 2 Acción OC

1 2n

Otro Caso

Acción 1

Selector

Verdadero

Acción 2

1

Acción n Acción OC…

2 n

Otro

Caso

Page 39: Fundamentos de Programación Ver 3.pdf

39

17. Elabore un algoritmo que en base a un número (entre 10 y 20) imprima su valor con letra.

18. Elabore un algoritmo que en base al número de día de la semana imprima que día

es. Estructuras de repetición

Cuando se requiere que un conjunto de instrucciones se repita varias veces se utiliza las

estructuras de repetición.

Diagrama de Flujo

For/Next

While/Mientras

Repeat/Repite

Diagrama NassiSchneiderman (NS)

For/Next

While/Mientras

Condición

Inc/Dec

Inicio

Proceso

Si

No

Condición

Proceso Verdadero

Falso

Condición

Proceso

Verdadero

Falso

Inc/Dec

Inicio

Proceso

While Condición

Proceso

Page 40: Fundamentos de Programación Ver 3.pdf

40

Repeat/Repite

Pseudocódigo

For/Next Para I = VI Hasta VF [Inc Valor/Dec Valor]

Proceso Fin Para

While/Mientras

Mientras Condición Proceso

Fin Mientras

Repeat/Repite Repite

Proceso Hasta Condición

19. Elabore un algoritmo que lea 10 calificaciones e imprima el promedio.

20. Elabore un algoritmo que lea dos números e imprima la serie de números que

existe entre el número menor a el número mayor.

21. Elabore un algoritmo que lea una serie de valores e imprima el valor más grande

de la serie. El fin de la serie esta denotado por el valor 9999.

22. Calcular la media de una serie de números positivos. El valor cero como entrada

indican que se ha finalizado la serie de números positivos.

Producto de Aprendizaje 3.1: De los siguientes problemas elabore el análisis y

algoritmo (20 puntos).

1. Obtenga el cuadrado de 243

2. Obtenga el perímetro y la superficie de un cuadrado

3. Obtenga la suma de dos números

4. Obtenga el perímetro de un rectángulo

5. Obtenga la hipotenusa de un triangulo rectángulo

6. Diseñar el algoritmo que pida por teclado dos números enteros y muestre su suma, resta, multiplicación, división y el resto (módulo) de la división. Si la

Repeat Condición

Proceso

Page 41: Fundamentos de Programación Ver 3.pdf

41

operación no es conmutativa, también se mostrará el resultado invirtiendo los operadores.

7. Lea las horas, minutos y segundos; calcule el tiempo total en segundos.

8. Suponiendo que una paella se puede cocinar exclusivamente con arroz y gambas, y que para cada cuatro personas se utiliza medio kilo de arroz y un cuarto de kilo de gambas, escribir un algoritmo que pida por pantalla el número de comensales para la paella, el precio por kilo de los ingredientes y muestre las cantidades de los ingredientes necesarios y el costo de la misma.

9. Obtenga el área y el volumen de un cilindro

10. Dado x grados Celsius obtenga su conversión a grados Fahrenheit

11. Obtenga el área de un triangulo en función de las longitudes de sus lados:

Donde:

12. Dado x numero de metros convertirlos a pies y pulgadas (1 metro = 39.37 pulgadas, 1 pie = 12 pulgadas)

13. Una tonelada métrica equivale a 35,273.92 onzas. Elabore un algoritmo que lea el

peso de un paquete de cereal para el desayuno en onzas y que obtenga como salida el número de cajas necesarias para llenar una tonelada métrica de cereal, así como deberá proporcionar cuantas onzas sobran. El algoritmo deberá permitir al usuario repetir este proceso las veces que desee.

14. Dado tres números, determinar si la suma de cualquier pareja de ellos es igual al

tercer número. Si se cumple la condición, escribir “iguales” en caso contrario “Distintos”.

15. Elabore un algoritmo lea 3 calificaciones de la materia de Fundamentos de

Programación y determine si el alumno “Aprobado” o “Reprobado” en base a su promedio.

16. Elabore un algoritmo que en base a un valor numérico determine si es Alto o Bajo.

Si el número es mayor a 100 imprima Alto, en caso contrario imprima Bajo.

17. Realice un algoritmo que calcule el monto a pagar por el servicio de estacionamiento, teniendo en cuenta que por la primera hora o fracción de estadía se tiene una tarifa de 10 pesos y las restantes tienen un costo de 6 pesos. Se tiene como datos: hora de entrada, hora de salida (formato militar).

Page 42: Fundamentos de Programación Ver 3.pdf

42

18. Desarrolle un algoritmo que permita convertir calificaciones numéricas, según la

siguiente tabla:

A = 10, B =9, C = 8, D = 7, E = 6 y F= 5 a 0.

19. Elabore un algoritmo que lea 4 números e imprima el mayor de ellos.

20. Desarrolle un algoritmo que permita determinar a partir de un número de días, ingresado por teclado, ¿Cuántos años, meses, semanas y días; constituyen el número de días proporcionado?

21. Elabore un algoritmo que lea un número e imprima sus dígitos en forma individual: Ejemplo: Dame un número? 7539

9 3 5 7

22. Obtenga el salario de un obrero en base a las horas extras trabajadas. El salario

se calcula sumando al sueldo base las horas extra. El sueldo base es equivale a $450.00 y las horas extra se calculan en base a la siguiente tabla:

1 a 10 hrs $11.50 11 a 12 hrs $ 13.00 13 a 20 hrs $ 14.00 21 y más hrs $ 15.00

23. Elabore un algoritmo que lea un número decimal e imprima su representación en

binario.

24. Desarrolle un algoritmo para la empresa Constructora Tecnovivir Casas C.A., que le permita calcular e imprimir la nómina para un total de 50 obreros a quien se le paga por horas trabajadas, la cual se paga a 50 pesos.

25. Elabore un algoritmo que lea un número e imprima su factorial.

Ejemplo: 5 = 5 * 4 * 3 * 2 * 1 = 120

Nota: El factorial de 0 (cero) por notación es 1.

Page 43: Fundamentos de Programación Ver 3.pdf

43

III.4. Tipos de datos y expresiones

Tipos de datos

Existen dos grupos de tipos de datos:

Simples (básicos, primitivos, sin estructura)

Compuestos (Estructurados, Complejos)

Dentro de los tipos de datos Simples se encuentran:

Numéricos

o Enteros

5, 15, 1350, 50000, etc.

o Punto Flotante (Reales)

0.00008, 3.7452, 8.72, 370000.0, etc.

En aplicaciones científicas se requiere una notación especial para manejar

números muy grandes (como la masa de la tierra) o muy pequeños (como la

masa de un electrón) esta notación es llamada notación exponencial o

notación científica:

367 520 100 000 000 000 00 3.675201E+20

0.000 000 000 030 257 3.0257E11

Lógicos (Booleanos)

Los datos tipo lógico es aquel que solo puede tomar dos valores:

Verdadero (True)

Falso (False)

Carácter (Char)

El tipo de datos carácter es un conjunto finito y ordenado de caracteres. Un dato

tipo carácter contiene un solo carácter. Un carácter se delimita por comillas

sencillas:

‘A’, ‘a’, ‘1’, ‘$’, etc.

Los grupos de caracteres son los siguientes:

o Caracteres alfabéticos: ‘A’, ‘B’,…,’Z’, ‘a’, ‘b’,…,’z’

o Caracteres numéricos: ‘0’, ‘1’, ‘2’,…,’9’

o Caracteres Especiales: +, , /, *, ^, ., ;, <, >, $, #, etc.

Y dentro los Compuestos o Estructurados se encuentran:

Page 44: Fundamentos de Programación Ver 3.pdf

44

Cadena de caracteres (String)

Una cadena de caracteres es una sucesión de caracteres que se encuentra

delimitado por comillas dobles:

“Hola Mundo”

“30 de septiembre de 2010”

“Esta es una cadena de caracteres llamada también String”

Clases (Class)

Arreglos (Array)

Registros (Records)

Listas (LinkerList)

Conjuntos (Set)

Árboles (Tree)

Grafos (Graph)

Abstractos (Abstract)

Archivos (Files)

En la siguiente tabla presentamos los 8 tipos de dato primitivos de Java, el número de bits

que ocupan y el rango de valores que pueden tomar.

Tipo Tamaño en bits Rango de valores

boolean 1 true o false Nota: El No. de bits puede variar según la

plataforma

char 16 ‘\u0000’ hasta ‘\uFFFF' Conjunto Unicode de ISO

byte 8 128 a +127 27 a 27 – 1

short 16 32,768 a +32,767

215 a 215 – 1

int 32 2,147,483,648 a +2,147,483,647

231 a 231 – 1

long 64 9,223,372,036,854,775,808 a +9,223,372,036,854,775,807

263 a 263 – 1

float 32

Rango negativo: 3.4028234663852886E+38 hasta 1.40129846432481707E45

Rango positivo: 1.40129846432481707E45 hasta 3.4028234663852886E+38

double 64

Rango negativo: 1.797693134862157E308 hasta 4.94065645841246544E324

Rango positivo: 4.94065645841246544E324 hasta 1.797693134862157E308

Page 45: Fundamentos de Programación Ver 3.pdf

45

Tokens elementos léxico de los programas

Existen 5 clase de tokens: identificadores, palabras reservadas, literales, operadores y

otros.

Identificadores

Los identificadores pueden representar variables, constantes, métodos, nombres de

archivos, etc.

Diagrama de contexto de los identificadores:

Regla para formar un identificador:

1. Debe comenzar por una letra 2. Después de la 1er. Letra puede contener letras, dígitos o guión de piso 3. No están permitidos los espacios en blanco 4. No deben formar palabras reservadas 5. Java es sensibles a las mayúsculas y minúsculas 6. En Java la longitud de los identificadores no tiene límite.

Expresiones

Las expresiones son combinaciones de constantes, variables, operadores, operandos,

paréntesis, funciones, etc.

c)(ba 3

Operando

Variable Operador

Constante Función

Page 46: Fundamentos de Programación Ver 3.pdf

46

Expresiones aritméticas

Las expresiones aritméticas son análogas a las expresiones matemáticas.

Operadores aritméticos:

+ Suma Resta * Multiplicación / División

% Modulo

Ejemplos:

5 + 3 = 8

3 – 2 = 1

5 * 3 = 15

17/2 = 8

17/2.0 = 8.5

(double) 17/2 = 8.5

20 % 7 = 6

Transforme las siguientes formulas en expresiones computacionales:

Page 47: Fundamentos de Programación Ver 3.pdf

47

III.5. Estructuras lógicas

Otro tipo de expresiones son las lógicas, o booleanas, cuyo valor puede ser true

(verdadero) o false (falso) y se denominan expresiones booleanas en honor a matemático

George Boole, quien desarrollo el álgebra booleana.

Mediante los operadores relacionales se pueden hacer comparaciones entre valores tipo

numérico y carácter.

Por ejemplo:

3 < 6 V 0 > 9 F

8 <= 5 F

A = 3 y B = 4 A>B F A<B V

A<=B V B==4 V

X=2 Y = 3 Z = 9 X>Z F Y<X F Z!=X V

Operadores Lógicas

Java cuenta con los operadores lógicos para formar condiciones más complejas. Los

operadores lógicos son:

Operador Descripción Corto Circuito

&& And condicional Si

|| Or condicional

& And lógico No

| Or lógico

^ Or exclusivo

! Negación

Tablas de verdad de los operadores lógico:

&& And Condicional

A B A && B

false false false

false true false

true false false

true true true

Con un operador && (And condicional) será true si y solo si todas sus entradas son true.

Page 48: Fundamentos de Programación Ver 3.pdf

48

|| Or Condicional

A B A || B

false false false

false true true

true false true

true true true

Con un operador || (Or condicional) será true si por lo menos una de sus entradas es true.

Operadores & And lógico y | Or lógico funcionan de manera idéntica a los operadores &&

And condicional y || Or condicional, con la excepción de de que los operadores lógicos

siempre se evaluaran todas las expresiones (es decir, no realizan una evaluación de corto

circuito).

^ Or Exclusivo

A B A ^ B

false false false

false true true

true false true

true true false

Con un operador ^ (Or exclusivo) es true si y solo si una de sus operandos es true y el

otro es false

! Negación

A !A

false true

true false

Por medio del operador ! (Negación) se invierte el significado de la condición. A diferencia

de los operadores &&, ||, &, | y ^ que son operadores binarios, el operador ! es unario.

Por ejemplo: Si A=3, B=2 y C=7

a) (A>5) || (B<C) V b) (A!=B) && (B==C) c) (A>=B) & (C>=5) d) !(A<=9) | (5>B)

Reglas de prioridad

Las expresiones que tienen dos o más operadores requieren de reglas matemáticas que

permitan determinar el orden de las operaciones, a estas reglas se les llama reglas de

prioridad.

Page 49: Fundamentos de Programación Ver 3.pdf

49

Prioridad Operadores Asociatividad

1 () Agrupación ID

2 (tipo) Cast DI

3 * / % ID

4 + ID

5 < <= > >= ID

6 == != ID

7 & ID

8 ^ ID

9 | ID

10 && ID

11 || ID

12 = *= /= %= += = DI

¿Cuál es el valor de las siguientes expresiones?

a) 15 * 14 – 3 *7 b) (24 + 2 * 6) / 4 c) 3 + 4 * (8 * (4 – (9 + 31) / 4)) d) 15 + 3 – 10 – 40 / (23 % 6)

Estructura general de un programa en Java

import Importación de paquetes con clases predefinidas.

public class NombreDeLaClase {

Declaración de variables miembro de la clase

public static tipo main (String[] args) {

Declaración de variables locales

Sentencias de la función main()

[return tipo;]

}

acceso static tipo NombreDelMétodo1 (Lista de Argumentos) {

Declaración de variables del método 1

Sentencias del método 1

[return tipo;]

}

Page 50: Fundamentos de Programación Ver 3.pdf

50

acceso static tipo NombreDelMétodo2 (Lista de Argumentos) {

Declaración de variables del método 2

Sentencias del método 2

[return tipo;]

}

}

Variables

Una variable es un identificador donde se almacena un valor con un cierto tipo de dato.

Las variables de tipos básicos almacena datos del tipo primitivos, las variables de clases o

variables de objetos, hacen referencias a objetos. Una constante es una variable cuyo

contenido no puede ser modificado.

Declaración de variables

Ejemplo:

int x, y;

float a, b, c;

char letra1;

Inicialización de variables

Una de las variantes que se puede hacer en una declaración es inicializar una variable

con un valor a ser declarada.

Ejemplos:

int x, y = 0;

float a, b, c = 100.0f;

char letra1 = ‘A’;

Se pueden declarar una variable en tres lugares:

En una clase, como miembro de clase

Al principio de un método o bloque de código

En el punto de utilización.

tipo identificador

,

;

tipo identificador

,

; Expresión =

;

Page 51: Fundamentos de Programación Ver 3.pdf

51

Ejemplo de las tres formas de declarar una variable:

Objetos que permiten E/S por consola.

En Java, la entrada y salida se lee y escribe en flujos (streams). La fuente básica de

entrada de datos es el teclado y la fuente de salida es pantalla. La clase System define

dos referencias a objetos static para la gestión de entrada (in) y salida (out).

Salida (System.out)

El objeto out definida en la clase System está asociado con el flujo de salida, que dirige

los datos a consola y permite visualizarlos en pantalla, por ejemplo:

System.out.println(“Esta es una cadena”);

Se visualizará en pantalla: Esta es una cadena.

Page 52: Fundamentos de Programación Ver 3.pdf

52

Descripción del método print:

void print(cadena) Despliega una cadena en pantalla.

void println(cadena) Despliega una cadena en pantalla y al final un carácter de nueva

línea (‘\n’).

Con estos métodos se puede escribir cualquier cadena o dato de los tipos primitivos,

como por ejemplo:

System.out.println( "Valores de las Variables: \n" +

"a=" + a +"\n" +

"b=" + b +"\n" +

"x=" + x +"\n" +

"y=" + y );

Entrada (System.in)

Por medio de un objeto Scanner se puede leer datos desde un programa, esta clase

pertenece al paquete java.util y debe ser importada. Para poder utilizarlo instancie un

objeto de la siguiente forma:

Scanner identificador = new Scanner (System.in);

Esta expresión crea un objeto Scanner y determina que leerá los datos desde teclado

mediante los siguientes métodos:

identificador.nextBoolean() Para Booleanos

identificador.nextByte() Para números Enteros tipo byte

identificador.nextShort() Para números Enteros tipo short

identificador.nextInt() Para números Enteros tipo int

identificador.nextLong() Para números Enteros tipo long

identificador.nextFloat() Para números flotantes

identificador.nextDouble() Para números doubles

identificador.next() Para el siguiente token

identificador.nextLine() Para una línea

Page 53: Fundamentos de Programación Ver 3.pdf

53

Recordemos el siguiente ejemplo: Obtenga la superficie y la longitud de un círculo. Análisis:

Entrada: Radio Salida: Cálculos de Superficie y Longitud Algoritmo:

Page 54: Fundamentos de Programación Ver 3.pdf

54

El siguiente ejemplo lee dos números enteros, los suma y muestra el resultado mediante ventanas de Windows.

Inicio

Fin

Superficie= π *Radio^2

Longitud=2*π *Radio

LeerRadio

Superficie, Longitud

Page 55: Fundamentos de Programación Ver 3.pdf

55

Las instrucciones: num1 = Integer.parseInt(primerNumero); num2 = Integer.parseInt(segundoNumero); Convierten los datos tipo String a tipo int y en caso de que ocurra una un error envían una excepción de formato de numérico.

Page 56: Fundamentos de Programación Ver 3.pdf

56

El método showMessageDialog de la clase JOptionPane tiene varias formas de enviarles parámetros: 1.

public static void showMessageDialog(Component componentePadre,

Object Mensaje)

Donde los parámetros:

componentePadre Determina la ventana en que se desplegara el mensaje, si es null,

se despliega en la ventana por defecto.

Mensaje Objeto a desplegar

2.

public static void showMessageDialog(Component componentePadre,

Object Mensaje,

String Titulo,

int TipodeMensaje)

Donde los parámetros:

componentePadre Determina la ventana en que se desplegara el mensaje, si es null,

se despliega en la ventana por defecto.

Mensaje Objeto a desplegar

Titulo Cadena de caracteres de la caja de dialogo

TipodeMensaje Valor entero que determina que imagen se despliega según la

siguiente tabla:

Tipo de cuadro de diálogo de mensaje Icono Descripción

JOptionPane.ERROR_MESSAGE

Ventana de Error

JOptionPane.INFORMATION_MESSAGE

Ventana Informativa

JOptionPane.WARNING_MESSAGE

Ventana de Advertencia

JOptionPane.QUESTION_MESSAGE

Ventana de introducción de datos o selección de alguna

alternativa

Page 57: Fundamentos de Programación Ver 3.pdf

57

Tipo de cuadro de diálogo de mensaje Icono Descripción

JOptionPane.PLAIN_MESSAGE Sin Icono Ventana estándar

Ejercicios: Elabore los siguientes programa en Java

1. Calcule el salario neto de un trabajador a partir de la lectura del nombre, horas

trabajadas, precio por hora y el cálculo de impuesto son el 25% del salario bruto

(horas trabajadas por precio por hora). Como resultado final imprima el nombre,

salario bruto, impuestos y salario neto.

2. Obtenga la superficie de un triangulo

Page 58: Fundamentos de Programación Ver 3.pdf

58

3. Obtenga el total a pagar aplicando un descuento del 5%.

4. Obtenga los valores de X1 y X2 para resolver ecuaciones de segundo grado:

5. De los valores a y b, obtenga cuantas veces cabe el valor b en el valor a.

6. Obtenga la suma de los números del 1 al 100.

7. Diseñar el algoritmo que lea el valor correspondiente a una distancia en millas

marinas y las escriba expresadas en metros. Sabiendo que 1 milla marina equivale

a 1852 metros.

8. Elabore un algoritmo que lea dos valores y los intercambie.

Sintaxis de la selección simple:

Estructuras selectivas simples

Diagrama de Flujo Diagrama NS

Pseudocódigo

Si Condición

Acción 1 Fin Si

if (Expresión) Acción;

o

if (Expresión)

Acción;

if (condición) {acción1; acción2,…,acción n} ;

o

Condición

Acción 1

Verdadero Falso

Acción 1

Condición

FalsoVerdadero

Nota: El if solo soporta una instrucción, si

desea poner más de una sentencia debe

utilizar un bloque de código ({..}).

Page 59: Fundamentos de Programación Ver 3.pdf

59

if (condición) {

acción1;

acción 2;

.

.

acción n;

}

9. La tienda “Artículos de Limpieza S.A. de C.V.” realiza un descuento del 5% a todas

las compras mayores a 2500.00 pesos. Elabore un algoritmo que resuelva este

problema.

10. La empresa “Electrónica Digital” desea un programa que determine si una persona

es solvente económicamente en base a los ingresos y los gastos; si los ingresos

son mayores a los gastos la persona es solvente. Elabore un algoritmo que

resuelva este problema.

11. En la clínica “Salud Eterna” desean un programa que determine si una persona

está enferma en base a su temperatura corporal; si la temperatura corporal es

mayor a 36.5 el programa debe mandar un mensaje que diga “Enfermo”.

Sintaxis de la selección doble:

Estructuras selectivas dobles

Diagrama de Flujo Diagrama NS

Pseudocódigo

Si Condición

Acción 1 En otro caso

Acción 2 Fin Si

Condición

Acción 1

Verdadero Falso

Acción 2

Acción 1

Condición

FalsoVerdadero

Acción 2

Page 60: Fundamentos de Programación Ver 3.pdf

60

if (condición)

acción 1;

else

acción 2;

if con más de una sentencia y usando un boque de código:

if (condición) {

acción1;

acción 2;

acción n;

}

else {

acción1’;

acción 2’;

acción n’;

}

12. Escriba un algoritmo que calcule el total a pagar en una tienda departamental, si la

compra excede de 15,000 pesos se concede un descuento del 10%, en caso

contrario el descuento es del 5%.

13. Elabora un algoritmo que en base a dos números imprima el mayor.

14. Elabore un algoritmo que en base a tres números imprima el mayor.

15. Elabore un algoritmo que en base a cuatro números, los imprima en forma

descendente.

Sintaxis de Selección múltiple:

Diagrama de Flujo

Selector

Acción 1 Acción nAcción 2 Acción OC

1 2n

Otro Caso

Page 61: Fundamentos de Programación Ver 3.pdf

61

Diagrama NS

Pseudocódigo

Según sea Selector hacer

1: Acción 1 2: Acción 2

… n: Acción n

En otro caso: Acción OC

Fin Según

switch (selector) {

case constante 1: Acción 1;

break;

case constante 2: Acción 2;

break;

default: Acción n;

}

16. Elabore un algoritmo que en base al número del mes imprima el mes

correspondiente como cadena de caracteres.

17. Elabore un algoritmo que en base a un número (entre 10 y 20) imprima su valor

con letra.

18. Elabore un algoritmo que en base al número de día de la semana imprima que día

es.

Acción 1

Selector

Verdadero

Acción 2

1

Acción n Acción OC…

2 n

Otro

Caso

switch (letra) {

case ‘a’: case’A’: case ‘á’: case ‘A’:

case ‘e’: case’E’: case ‘é’: case ‘É’:

case ‘i’: case’I’: case ‘í’: case ‘Í’:

case ‘o’: case’O’: case ‘ó’: case ‘Ó’:

case ‘u’: case’U’: case ‘ú’: case ‘Ú:

System.out.println(letra + “ es vocal”);

}

Page 62: Fundamentos de Programación Ver 3.pdf

62

Sintaxis de los ciclos Java:

Diagrama de Flujo

For/Next

While/Mientras

Repeat/Repite

Diagrama NassiSchneiderman (NS)

For/Next

While/Mientras

Repeat/Repite

Condición

Inc/Dec

Inicio

Proceso

Si

No

Condición

Proceso Verdadero

Falso

Condición

Proceso

Verdadero

Falso

Inc/Dec

Inicio

Proceso

While Condición

Proceso

Repeat Condición

Proceso

Page 63: Fundamentos de Programación Ver 3.pdf

63

Pseudocódigo

For/Next Para I = VI Hasta VF [Inc Valor/Dec Valor]

Proceso Fin Para

While/Mientras

Mientras Condición Proceso

Fin Mientras

Repeat/Repite Repite

Proceso Hasta Condición

for

1. for (Inicialización; Condición; Incremento)

sentencia;

2. for (Inicialización; Condición; Incremento) {

sentencia 1;

sentencia 2;

sentencia n;

}

while

1. while (condición)

sentencia;

2. while (condición) {

sentencia 1;

sentencia 1;

sentencia n;

}

Page 64: Fundamentos de Programación Ver 3.pdf

64

do while

1. do

sentencia;

while (condición);

2. do {

sentencia 1;

sentencia 2;

sentencia n;

} while (condición);

19. Elabore un algoritmo que lea 10 calificaciones e imprima el promedio.

20. Elabore un algoritmo que lea dos números e imprima la serie de números que

existe entre el número menor a el número mayor.

21. Elabore un algoritmo que lea una serie de valores e imprima el valor más grande

de la serie. El fin de la serie esta denotado por el valor 9999.

22. Calcular la media de una serie de números positivos. El valor cero como entrada

indican que se ha finalizado la serie de números positivos.

Clase String La Clase String proporciona los mecanismos para el manejo de cadenas.

Ya que no se puede cambiar el valor de un String una vez que se ha creado, esta clase se usa principalmente para analizar, manipular y obtener los valores de las cadenas. Aunque hay métodos que permiten modificar y añadir al valor de la cadena, estos métodos no modifican el String en si, sino que regresan un nuevo String con los valores deseado.

Métodos Descripción

String() Crea un Objeto String.

String(char ch[]) Crea un Objeto String basado en el arreglo ch[].

String(String s) Crea un Objeto String con el valor s especificado.

Page 65: Fundamentos de Programación Ver 3.pdf

65

Métodos Descripción

char charAt(int pos) Regresa el carácter que se encuentra en la posición pos.

int compareTo(String otroString)

Regresa un int donde: < 0 El valor del String es menor al

otroString. 0 El valor del String es igual a

otroString > 0 El valor del String es mayor a

otroString.

String concat(String str) Regresa la concatenación del String y el str.

boolean equals(Object otroObjeto) Regresa true si otroObjeto es String y tiene el mismo valor.

boolean equalsIgnoreCase(String OtroString) Compara el String con otroString sin importar las mayúsculas y minúsculas.

int length() Regresa la longitud del String

int indexOf(String str) Regresa la posición donde se encuentra str en el String, en caso de no encontrarlo regresa -1.

int indexOf(String str, int ini) Regresa la posición donde se encuentra str en el String comenzando en la posición ini.

int indexOf(char ch) Regresa la primera posición donde se encuentra ch en el String.

int indexOf(char ch, int ini) Regresa la primera posición donde se encuentra ch en el String comenzando en la posición ini.

int lastIndexOf(String str) Regresa la última posición donde se encuentra str en el String.

int lastIndexOf(String str, int ini)

Regresa la última posición donde se encuentra str en el String que se encuentre antes de la posición ini.

Page 66: Fundamentos de Programación Ver 3.pdf

66

Métodos Descripción

String replace(char viejoch, char nuevoch) Remplaza todos los caracteres viejoch por el carácter nuevoch.

String substring(int inicio, int fin) Regresa una subcadena desde inicio hasta fin.

String substring(int inicio) Regresa una subcadena desde inicio hasta final de la cadena.

String toLowerCase() Regresa el valor del String en minúsculas

String toString() Regresa el valor del String.

String toUpperCase() Regresa el valor del String en mayúsculas.

String trim() Regresa la String sin los espacios a la izq y der.

Static String valueOf(double d) static String valueOf(float f) static String valueOf(long l) static String valueOf(int i) static String valueOf(char ch) static String valueOf(boolean b)

Regresa un String que contiene el valor del tipo de dato especificado.

Static String valueOf(Object obj) Regresa un String que representa una cadena del Object.

23. Elabore un programa que lea su nombre, lo imprima Normal y en forma de espejo.

Ejemplo:

Dame tu nombre: José Pérez

José Pérez-zeréP éseJ

24. Elabore un programa que lea su nombre y lo despliegue por palabra.

25. Elabore un programa que lea su nombre y despliegue cuantas vocales, literales y

espacios tiene.

Page 67: Fundamentos de Programación Ver 3.pdf

67

Producto de Aprendizaje 3.2: Desarrolle los siguientes programas en Java (20

puntos)

1. En la empresa Aceros Industrializados S.A. de C.V. los obreros recibieron un

incremento del 7.6% retroactivo a 6 meses. Elabore un programa que en base el salario mensual despliegue el monto total de incremento por los 6 meses.

2. Elabore un programa que lea 4 números e imprima el mayor de ellos. 3. Elabore un programa que lea los tres parciales de la materia de Fundamentos de

Programación y en base el Promedio despliegue si Acredita o No Acredita la materia.

4. Elabore un programa que lea un número e imprima sus dígitos en forma individual: Ejemplo: Dame un número? 7539 9 3 5 7 5. Obtenga el salario de un obrero en base a las horas extras trabajadas. El salario se

calcula sumando al sueldo base las horas extra. El sueldo base es equivale a $450.00 y las horas extra se calculan en base a la siguiente tabla:

1 a 10 hrs $11.50 11 a 12 hrs $ 13.00 21 y más hrs $ 15.00 6. Elabore un programa que lea un número decimal e imprima su representación en

binario. 7. Una empresa de autobuses hace viajes desde la Capital del País hacia ciudades del

interior, para lo cual dispone de dos tipos de vehículos, pequeños y grandes, con capacidad de 20 y 60 pasajeros respectivamente.

Cada vez que parte un autobús del terminal de la ciudad Capital es anotado el tipo de vehículo ( P o G) y el número de pasajeros que transporta. La empresa desea un reporte al final del día con la información siguiente:

a) El tipo de autobús: b) La cantidad de pasajeros. c) El mensaje "Ganancia" si en el autobús viaja un número de pasajeros igual o

mayor que el 50% de su capacidad, y "Pérdida" en caso contrario. 8. Elabore un programa que lea un número e imprima su factorial.

Ejemplo: 5 = 5 * 4 * 3 * 2 * 1 = 120

Nota: El factorial de 0 (cero) por notación es 1.

Page 68: Fundamentos de Programación Ver 3.pdf

68

9. Pedir un número entre 0 y 9999 y decir cuántas cifras tiene. 10. Elabore un programa que lea serie de números e imprima su media. El final de los

números de denota con un -1. 11. Elabore un programa que lea 10 calificaciones e imprime el promedio. 12. Pedir 10 calificaciones entre 0 a 10 y mostrarla de la forma: Insuficiente (0 a 6),

Suficiente (7), Bien (8), Muy bien (9) y Excelente (10). 13. Elabore un algoritmo que lea dos números diferentes, he imprima el rango del

número más pequeño al número más grande. 14. Solicite un número y despliegue el valor individual de cada digito de la siguiente

forma: 7489 siete, cuatro, ocho, nueve. 15. Pedir un número de 0 a 99 y mostrarlo escrito. Por ejemplo, para 56 mostrar:

cincuenta y seis. 16. Elabore un programa que lea un número positivo diferente de cero e imprima la

secuencia de números en forma descendente hasta el cero. 17. Leer un número y mostrar su cuadrado, repetir el proceso hasta que se introduzca

un número negativo. 18. Elabore un programa que imprima la suma de los números impares del 1 al 100

utilizando ciclos. 19. Leer un número e indicar si es positivo o negativo. El proceso se repetirá hasta que

se introduzca un 0. 20. Realizar un juego para adivinar un número. Para ello pedir un número N, y luego ir

pidiendo números indicando “mayor” o “menor” según sea mayor o menor con respecto a N. El proceso termina cuando el usuario acierta.

21. Elabore un programa en Java que lea su nombre y lo despliegue en mayúscula cada palabra. Ejemplo: JOSÉ PÉREZ José Pérez

Page 69: Fundamentos de Programación Ver 3.pdf

69

IV. Programación orientada a objetos y modelado. ¿Qué es un Modelo?

“Un Modelo es una simplificación de la realidad.”

¿Por qué Modelamos?

Construimos modelos para comprender mejor el sistema que estamos desarrollando.

El Modelado no es sólo para los grandes sistemas. Sin embargo, es absolutamente cierto

que, cuanto más grande y complejo es el sistema, el modelado se hace más importante,

por una simple razón:

Construimos modelados de sistemas complejos porque no

podemos comprender el sistema en su totalidad

IV.1. Características del modelo orientado a objetos

Hay un cierto desacuerdo sobre exactamente qué características de un método de

programación o lenguaje le definen como "orientado a objetos", pero hay un consenso

general en que las características siguientes que son las más importantes:

Abstracción: La abstracción es la propiedad de los objetos que consiste en tener

en cuenta sólo los aspectos más importantes desde un punto de vista

determinado y no tener en cuenta los restantes.

Encapsulamiento: Es el proceso de agrupar datos y operaciones relacionadas bajo la

misma unidad de programación. En el caso de los objetos que

poseen las mismas características y comportamientos se agrupan en

clases, que no son más que unidades o módulos de programación

que encapsulan datos y operaciones.

Herencia: La idea de la herencia es permitir la creación de nuevas clases basadas

en clases existentes. Cuando heredamos de una clase existente,

reusamos (o heredamos) métodos y campos, y agregamos nuevos

campos y métodos para cumplir con la situación nueva. Cada vez que

encontremos la relación "es-un" entre dos clases, estamos ante la

presencia de herencia.

La clase ya existente es llamada superclass, o clase base, o clase

padre, mientras que la clase nueva es llamada subclase, clase derivada,

o clase hija.

Page 70: Fundamentos de Programación Ver 3.pdf

70

Polimorfismo: Es la propiedad que indica, literalmente, la posibilidad de que una

entidad tome muchas formas. En términos prácticos, el polimorfismo

permite referirse a objetos de clases diferentes mediante el mismo

elemento de programa y realizar la misma operación de diferentes

formas, según sea el objeto que se referencia en ese momento.

IV.2. Elementos primordiales en el modelo de objetos

La programación Orientada a Objetos trata de cumplir las necesidades de los usuarios

finales, estás tareas se realizan mediante el modelado del mundo real, el soporte

fundamental de este paradigma de programación.

Elementos primordiales:

Abstracción

Recordemos que la representación en UML de una clase es así:

Modele las siguientes clases, con sus atributos, constructores y métodos (cambia (set),

regresa (get) y un método general de desplegado)

Persona

Vehículo

Figura (Geométrica)

Encapsulamiento

De los modelos anteriores desarróllelas como clase utilizando la siguiente notación.

Nombre de la clase

Atributos

Comportamiento

Page 71: Fundamentos de Programación Ver 3.pdf

71

public class NombreDeLaClase {

Declaración de variables miembro de la clase

Constructores…

acceso static tipo NombreDelMétodo1 (Lista de Argumentos) {

}

acceso static tipo NombreDelMétodo2 (Lista de Argumentos) {

}

}

Herencia

Al crear una clase, en vez de declarar miembros (variables y métodos) completamente

nuevos, el programador puede designar que la nueva clase herede los miembros de una

clase existente. Esta clase existente se conoce como superclase, y la nueva clase se

conoce como subclase. En otros lenguajes de programación, como C++ se refieren a la

superclase como clase base y a la subclase como clase derivada. Una vez creada, cada

subclase se puede convertir en superclase de futuras subclases. Una subclase

generalmente agrega sus propias variables y métodos, por lo tanto, una subclase es más

específica que una superclase y representa un grupo más concreto de objetos.

La herencia explícita es cuando una subclase hereda en forma directa los atributos y

comportamiento de la superclase, mientras que la herencia implícita es cuando una

subclase hereda atributos y comportamientos de dos o más niveles arriba de las

jerarquías de clase.

Préstamo

Hipotecario Personal Prendario

Superclase

Subclases

Page 72: Fundamentos de Programación Ver 3.pdf

72

A veces es difícil decidir cuál es la relación de herencia más óptima entre el diseño de

clases. Consideremos por ejemplo el caso de empleados de una empresa, existen

diferentes tipos de clasificación según sea el criterio de discriminación, por ejemplo por

tipo de empleado:

Por tipo de percepción:

Por tiempo de dedicación laboral:

Por tipo de contratación:

Empleado

Directivo Administrativo Obrero

Empleado

Confianza Comisión Asalariado

Empleado

Discontinuo TiempoFijo Horas

Empleado

Base Anual Mensual

Page 73: Fundamentos de Programación Ver 3.pdf

73

Como se darán cuenta es difícil establecer cuál de estos modelos es el más adecuado, lo

mejor es decidirse hasta que tenga la aplicación real y el usuario le diga cuál es la mejor

forma de organización de su empresa y así trasladarla al diseño jerárquico de clases.

En una clase existen secciones públicas, privadas, protegidas y visibilidad amigable (por defecto). Los elementos públicos son accesibles a todos los métodos de cualquier clase; los elementos privados son accesibles sólo a los miembros de la clase en la que están definidos, los elementos protegidos pueden ser accedidos clases del mismo paquete y clases derivadas del mismo o de otro debido a la propiedad de la herencia; y los elementos de la visibilidad por defecto son accesibles desde cualquier clase del mismo paquete. En general, herencia pública significa que una subclase tiene acceso a los elementos públicos y protegidos de la superclase. Los elementos públicos se heredan como públicos, los elementos protegidos permanecen protegidos. En java la herencia siempre es pública, las clases para ser visibles desde otros paquetes se deben declarar con e modificador public, en caso contrario la clase está restringida al paquete donde se declaro. Es necesario hacer una diferencia entre la relación “es un” y la relación “tiene un”. La relación “es un” representa la herencia, por ejemplo considere la siguiente jerarquía de clases:

En este caso el Automóvil es un Vehículo, mientras que la relación “tiene un” sería el Automóvil tiene un volante, lo cual marca la diferencia, todos los automóviles son Vehículos pero no todos los Vehículos son Automóviles y finalmente todos los Automóviles tiene un volante. Por lo tanto una clase base (o superclase) es una clase más general de la cual se derivan clases derivadas (o subclases). Una clase derivada (o subclase) es una clase que hereda los atributos y comportamiento de una clase base (o superclase). Sintaxis: public class Subclase extends Superclase { acceso nuevoMiembro ... public tipo NuevoMétodo (Lista de Parámetros) … }

Vehículo

Automóvil Camión Bicicleta

Page 74: Fundamentos de Programación Ver 3.pdf

74

Una subclase es una especialización de una superclase. En consecuencia el constructor de la superclase debe ser llamado antes de crear un objeto de la superclase y el constructor de la subclase debe ser invocado después. Haciendo un comparativo, lo mismo ocurre con los objetos de la subclase, el objeto de la superclase debe de existir antes de convertir en un objeto a la subclase. En el siguiente ejemplo se tiene la clase A y B, con sus respectivos constructores, la clase D hereda todas las características de la clase A, mientras que la clase E hereda las características de la clase B. Dentro de la clase principal EjemploConstructores, al instanciar el objeto d1 del tipo D, primero se creará el objeto A mediante su constructor y posteriormente se ejecutara el constructor de D, al instanciar el objeto e1 del tipo E, ocurrirá algo similar, ejecutándose primero el constructor de B y posteriormente el constructor de E.

Page 75: Fundamentos de Programación Ver 3.pdf

75

Resultado de la ejecución:

En el ejemplo anterior vimos como los constructores se invocan implícitamente, pero que pasaría si queremos invocar un constructor con argumentos, entonces lo invocaríamos de forma explícita por medio del comando:

super(lista de argumentos) Si es un método de la super clase sería:

super.metodo(lista de argumentos). Ejemplo: public class Persona { protected String nombre; public Persona(String nombre) { // Constructor de Persona this.nombre = new String(nombre); } } public class Estudiante extends Persona { private long numeroControl; public Estudiante(String nom, long nc) { // Constructor de Estudiante super(nom); // llamada al constructor de la superclase (Persona). numeroControl = nc; } … } Ejercicio: Desarrolle el siguiente diseño en Java y cree una clase principal donde instancie un objeto de cada clase.

Page 76: Fundamentos de Programación Ver 3.pdf

76

Una vez implementado en BlueJ se tendrá un diseño así:

+ Presamo()+ void Prestamo (float M, float I)+ float calculaIntereses()+ void actualizaMonto(float M)+ void actualizaInteres(float I)+ String muestra()

- float Monto- float Interes

Prestamo

Hipotecario Personal Prendario

-String Inmueble-int AniosHipo

+ Hipotecario()+ Hipotecario(float M, float I, String In, int A)+ String muestra()

-String TipoDocumento-String FechaVen

+ Personal()+ Personal(float M, float I, String D, String F)+ String muestra()

-String Prenda- float ValorPrenda

+ Prendario()+ Prendario(float M, float I, String P, float V)+ String muestra()

Page 77: Fundamentos de Programación Ver 3.pdf

77

Page 78: Fundamentos de Programación Ver 3.pdf

78

Page 79: Fundamentos de Programación Ver 3.pdf

79

Resultado de la ejecución:

Page 80: Fundamentos de Programación Ver 3.pdf

80

Polimorfismo

En programación orientada a objetos se denomina polimorfismo a la capacidad del código

de un programa para ser utilizado con diferentes tipos de datos u objetos. También se

puede aplicar a la propiedad que poseen algunas operaciones de tener un

comportamiento diferente dependiendo del objeto (o tipo de dato) sobre el que se aplican.

Se puede clasificar el polimorfismo en dos grandes clases:

Polimorfismo dinámico (herencia-redefinición) es aquél en el que el código no

incluye ningún tipo de especificación sobre el tipo de datos sobre el que se trabaja.

Así, puede ser utilizado a todo tipo de datos compatible.

Implementación en BlueJ:

Animal

dormir()

León

dormir()

Oso

dormir()

Tigre

dormir()

dormir (){System.out.println(“Zzzzz”);

}

dormir (){System.out.println(“Sobre el vientre”);

} dormir (){System.out.println(“Sobre la espalda”);

}

dormir (){System.out.println(“En un árbol”);

}

Page 81: Fundamentos de Programación Ver 3.pdf

81

Page 82: Fundamentos de Programación Ver 3.pdf

82

Clase abstracta. Cuando pensamos en un tipo de clase, suponemos que los programas crearán objetos de ese tipo, sin embargo, existen casos en los que es conveniente declarar clases para las cuales el programador no pretende instanciar objetos. Dichas clases se denominan clases abstractas, debido a que estas solo se utilizan como superclases en la jerarquía de herencias, nos referiremos a ellas como superclases abstractas. Estas clases no pueden utilizarse para instanciar objetos, porque las clases abstractas se declaran incompletas, las subclases deben declarar las partes faltantes. El propósito de una clase abstracta es proporcionar una superclase apropiada, a partir de la cual se puedan heredar otras clases. Las clases que pueden usarse para instanciar objetos se conocen como clases concretas, dichas clases proporcionan implementaciones de todos los métodos que declaran. Podríamos tener una superclase llamada Bidimensional y derivar a partir de ella clases concretas como Cuadrado, Circulo y Triangulo. También podríamos tener una superclase abstracta llamada Tridimensional y derivar de ella clases concretas como Cubo, Esfera y Tetraedro. Las clases abstractas son demasiado genéricas como para crear objetos reales; sólo especifican lo que las subclases tienen en común. Necesitamos ser más específicos antes de poder crear objetos. Por ejemplo, si alguien le dice “dibuje una figura”, ¿Qué figura dibujaría?. Las clases específicas proporcionan los aspectos específicos que hacen que sea razonable el crear instancias de objetos.

Page 83: Fundamentos de Programación Ver 3.pdf

83

Una jerarquía de clases no necesita contener clases abstractas, sin embargo, comúnmente se utilizan jerarquías de clases encabezadas por superclases abstractas para reducir las dependencias de código cliente en un tipos de subclases específicas. Por ejemplo considere la siguiente jerarquía de clases:

En este jerarquía de clases la superclase abstracta Figura, en el siguiente nivel tenemos otros dos clases abstractas Bidimensional y Tridimensional y en el último nivel se declaran clases concretas las cuales son para las figuras bidimensionales Circulo, Cuadrado y Triangulo, mientras que las figuras tridimensionales son Esfera, Cubo y Tetraedro. Para que una clase sea abstracta se debe declarar con la palabra reservada abstract. Una clase abstracta por lo general tiene uno o más métodos abstractos (los métodos static no pueden ser abstractos). Un método abstracto es un método con la palabra reservada abstract en su declaración.

public abstract class NombreDeClase {

public abstract tipo Método ();

}

Los métodos abstractos no proporcionan implementaciones. Una clase que contiene métodos abstractos debe declararse como clase abstracta. Cada subclase concreta de una clase abstracta debe proporcionar implementaciones concretas de los métodos abstractos de la superclase. Los constructores no se heredan, por los que no pueden declararse como abstractos. Aunque no podemos crear instancias de objetos de superclases abstractas, podemos utilizar superclases abstractas para crear variables que puedan guardar referencias de subclases concretas derivadas de la superclases. Ejemplo de polimorfismo Considere la siguiente jerarquía de clases:

Figura

Bidimensional Tridimensional

Circulo Cuadrado Triangulo Esfera Cubo Tetraedro

Page 84: Fundamentos de Programación Ver 3.pdf

84

Comenzaremos con la superclase abstracta Figura, la cual declara la interfaz para la jerarquías (es decir, el conjunto de métodos que puede invocar un programa en todos los objetos Figura), observe también que en el diagrama de clases, el nombre de la clase abstracta Figura aparece en cursivas.

Métodos

regresaArea regresaVolumen regresaNombre toString

Figura 0.0 0.0 abstract Predeterminado

de Object

Punto 0.0 0.0 “Punto” [x,y]

Circulo r2 0.0 “Circulo” [x,y]; Radio = r

Cilindro 2 r h + 2 r2 r2 h “Cilindro” [x,y]; Radio = r;

Altura = h

La clase Figura proporciona los métodos regresaArea, regresaVolumen y regresaNombre, además como es una extensión de la clase Object, hereda los 11 métodos, entre ellos se encuentran toString, por lo que tendrá que ser redefinido. Implementación de BlueJ:

Figura

Punto

Circulo

Cilindro

Page 85: Fundamentos de Programación Ver 3.pdf

85

Page 86: Fundamentos de Programación Ver 3.pdf

86

Page 87: Fundamentos de Programación Ver 3.pdf

87

Resultado de la ejecución:

Polimorfismo estático (sobrecarga) es aquél en el que los tipos a los que se aplica

el polimorfismo deben ser explicitados y declarados uno por uno antes de poder

ser utilizados.

Ejemplo: El siguiente programa declara una clase llamada Sobrecarga con cuatro

métodos llamados “despliega” que se encuentran sobrecargados. El primer método no

recibe parámetros, el segundo recibo solo un parámetro tipo int, el tercero recibo dos

parámetros tipo int y por último el cuarto método recibe dos parámetros tipo float. El

funcionamiento de cada método depende de los parámetros que reciba, desplegando en

pantalla el número de argumentos recibidos, los tipos y valores (con excepción del

método sin parámetros, el cual solo despliega en pantalla un mensaje).

Page 88: Fundamentos de Programación Ver 3.pdf

88

El programa principal EjemploSobrecarga1 instancia un objeto llamado Sob1, posteriormente invoca a los métodos “despliega” enviando varios números y tipos de argumentos diferentes, incluso ningún.

El siguiente programa declara una clase principal llamada EjemploSobrecarga2, con

cuatro métodos llamados “Area” que se encuentran sobrecargados. El primer y segundo

método calcula el área de un cuadrado y reciben un argumento cada uno, el primer de

ellos recibe un tipo int y el segundo lo recibe tipo float. El tercer y cuarto método calcula

en área de un rectángulo, reciben dos argumentos, los parámetros del tercer método son

de tipo int y el cuarto método sus parámetros son de tipo float. Regresan un valor tipo long

(primer y tercer método) y un valor tipo double (el segundo y cuarto método). Además se

utiliza la clase DecimalFormat para formatear los datos de salida.

Page 89: Fundamentos de Programación Ver 3.pdf

89

+ Area (int L): long+ Area (float l): double+ Area (int b, int a): long+ Area (float b, float a): double

EjemploSobrecarga2

Page 90: Fundamentos de Programación Ver 3.pdf

90

IV.3. Representación gráfica del diseño

IV.4. Relación entre la programación orientada a objetos y la estructurada

Investigar este tema y entregarlo como producto de aprendizaje

Page 91: Fundamentos de Programación Ver 3.pdf

91

Producto de Aprendizaje 4: Desarrolle los siguientes programas en Java (40 puntos)

1. Implemente el ejercicio de Figura/Punto/Circulo/Cilindro donde se puedan capturar

las variables de cada clase.

2. Elabore una clase principal que tenga 6 métodos sobrecargados llamado areaTriangulo, que realizaran el cálculo del área de un triangulo en base a lo siguiente:

Con un parámetro, se asume que es un triangulo Equilátero y el área se calcula:

Donde a es el lado del triangulo

Con dos parámetros, el área se calcula:

Donde b es la base y a es la altura del triangulo

Con tres parámetros, el área se calcula::

Donde a, b y c son los valores de las longitudes de los lados del triangulo y p se calcula así:

Page 92: Fundamentos de Programación Ver 3.pdf

92

Los primeros 3 métodos sobrecargados recibirán datos tipo int y los restantes 3, datos tipo double. El valor de retorno de todos los métodos será double. Mande a imprimir a pantalla los resultados de todos los métodos.

3. Elabore una clase principal que tenga 6 métodos sobrecargados llamado areaCuadrilatero, que realizaran el cálculo del área de un cuadrilátero en base a lo siguiente:

Dos parámetros, área de un romboide y se calcula:

Donde b es la base y a es la altura del romboide

Tres parámetros, área de un trapezoide o cualquier cuadrilátero y se calcula así:

Donde y son las diagonales y es el ángulo que lo conforma (Ver figura).

O seis parámetros y se calcula así:

Siendo: ángulo comprendido entre los lados . ángulo comprendido entre los lados

Page 93: Fundamentos de Programación Ver 3.pdf

93

Los primeros 3 métodos sobrecargados recibirán datos tipo long y los restantes, datos tipo double. El valor de retorno de todos los métodos será double. Mande a imprimir a pantalla los resultados de todos los métodos.

4. Investigar el tema IV.4 Relación entre la programación orientada a objetos y la

estructurada

Page 94: Fundamentos de Programación Ver 3.pdf

94

V. Implementación Orientada a Objetos.

V.1. Estructura de una clase

V.2. Elementos de una clase

Nombre. Cada clase debe tener un nombre distintivo y único. Una clase se puede

representar solo con el nombre.

Atributos. Un atributo es una propiedad de una clase y se identifica por un nombre. La

clase puede tener cualquier número de atributos o carecer de estos.

Figura

Origen

Mover()Dibujar()Tamaño()

Nombre

Atributos

Operaciones

Figura

Page 95: Fundamentos de Programación Ver 3.pdf

95

Operaciones. Una operación es la implementación de un servicio que puede ser

requerido para que muestre un comportamiento, en otras palabras, una

operación es una abstracción de algo que se puede hacer a un objeto. Al

igual que los atributos una clase puede tener cualquier número de

operaciones e incluso ninguna.

Organización de atributos y operaciones

Cuando se dibuja una clase, no hay por qué mostrar todos sus atributos y todas sus

operaciones, de hecho, en la mayoría de los casos solo se presentan los atributos y

operaciones más relevantes o importantes. Si se quiere decir que existen más de uno de

estos elementos se pueden poner puntos suspensivos (“…”).

Cliente

NombreDireccionTelefono

Fecha_Nac

Atributos

Rectángulo

Mover()Dibujar()Tamaño()

Operaciones

Page 96: Fundamentos de Programación Ver 3.pdf

96

Declaración en Java:

Declaración de una clase en general Declaración de una clase principal

public class NombreDeLaClase {

Declaración de variables miembro de la clase

acceso tipo NombreDelMétodo1 (Lista de parámetros) {

Declaración de variables del método 1

Sentencias del método 1

[return tipo;]

}

acceso static tipo NombreDelMétodo2 (Lista de parámetros) {

Declaración de variables del método 2

Sentencias del método 2

[return tipo;]

}

}

public class NombreDeLaClase {

Declaración de variables miembro de la clase

public static tipo main (String[] args) {

Declaración de variables locales

Sentencias de la función main()

[return tipo;]

} acceso static tipo NombreDelMétodo1 (Lista de parámetros) {

Declaración de variables del método 1

Sentencias del método 1

[return tipo;]

}

acceso static tipo NombreDelMétodo2 (Lista de parámetros) {

Declaración de variables del método 2

Sentencias del método 2

[return tipo;]

}

V.3. Clase principal

En la programación orientada a objetos los componentes principales son las clases y los

objetos.

La clase principal es aquella que contiene el método principal llamado main.

Estructura de una clase principal en Java:

Auditor

Constructor yDestructorBuscar_inf()Confrontar()…

Page 97: Fundamentos de Programación Ver 3.pdf

97

V.4. Crear objetos

Por medio del operador new se crean objetos en Java y la sintaxis en la siguiente:

Ejemplo:

1. La empresa Aceros Industrializados SA de CV requiere de un programa que

controle a sus Directivos (2), Empleados (5) y Obreros (10). Los Directivos tienen

las siguientes características: Nombre, Dirección, Edad, Teléfono, Puesto, Sueldo

Mensual y Metas, mientras que los Empleados tienen los atributos: Nombre,

Dirección, Edad, Teléfono, Puesto, Sueldo Mensual y Departamento y los Obreros

tiene las siguientes variables: Nombre, Dirección, Edad, Teléfono, Puesto, Sueldo

Semanal y Responsabilidades. Modele las clases y elabore un programa en Java

que las implemente, además cree un objeto de cada una, capturando los datos de

cada objeto.

2. La compañía Alextra paga a sus empleados en forma semanal. La compañía tiene

cuatro tipo de empleados: empleados Asalariados que reciben un salario fijo,

empleados por horas, que según las horas trabajadas recibirá su sueldo de la

siguiente forma: las primeras 40 horas se pagan a un precio y las excedentes se

pagan 1.5 veces el precio normal. Empleados por comisión, que su sueldo es el

10% de sus ventas y empleados asalariado por comisión, que recibe un salario

public class NombreDeLaClasePrincipal{ public static void main(String[] args){

instrucciones;…

}}

Cuerpo de la clase principalCuerpo de

main

1.clase identificador;identificador = new clase();

2.clase identificador = new clase();

Page 98: Fundamentos de Programación Ver 3.pdf

98

base más el 6% de sus ventas. Cada empleado tiene Nombre, Domicilio, Teléfono

y Número de Seguro Social. Modele las clases y elabore un programa en Java que

las implemente, además cree un objeto de cada una, capturando los datos de

cada objeto.

Producto de Aprendizaje 5:

1. El Instituto tecnológico de Aguascalientes desea un programa que controle a sus

alumnos de Licenciatura, Maestría y Doctorado. Los alumnos de Licenciatura tiene

los Atributos: Nombre, Domicilio, Teléfono, Edad, Especialidad y Promedio,

mientras que los alumnos de Maestría tiene los siguientes variables miembro:

Nombre, Domicilio, Teléfono, Edad, Investigación Maestría y Fecha de entrega.

Los estudiantes de Doctorado tiene las siguientes variables: Nombre, Domicilio,

Teléfono, Edad, Proyecto de Doctorado y Monto de la Investigación. Modele las

clases y elabore un programa en Java que las implemente, además cree un objeto

de cada una, capturando los datos de cada objeto.

2. De las siguientes clases realice su modelado y cree un programa en Java

instanciando un objeto de cada clase capturando los datos para cada variable

miembro. Se desea representar un triangulo, el cual está definido por tres puntos,

cada uno de los cuales tiene dos coordenadas X, Y. El triangulo tiene además

color de línea y un color de relleno, un color por su parte está definido por tres

valores numéricos entre 0 y 255 (estándar RGB por Red-Green-Blue). El primer

valor numérico define la intensidad del rojo, el segundo el verde y el tercero el

azul. Además el triangulo tendrá las funciones de calcular el perímetro del

triangulo y calcular el área.

Page 99: Fundamentos de Programación Ver 3.pdf

99

VI. Modularidad.

La modularidad es la capacidad que tiene un sistema de ser estudiado, visto o entendido como la unión de varias partes que interactúan entre sí y que trabajan para alcanzar un objetivo común, realizando cada una de ellas una tarea necesaria para el cumplimiento de dicho objetivo. Cada una de esas partes en que se encuentre dividido el sistema recibe el nombre de módulo. Idealmente un módulo debe poder cumplir las condiciones de caja negra, es decir, ser independiente del resto de los módulos y comunicarse con ellos (con todos o sólo con una parte) a través de unas entradas y salidas bien definidas. Las programación modular aplicada a la programación orientada a objetos se le denomina Modularidad a la propiedad que permite subdividir una aplicación en partes más pequeñas (llamadas módulos), cada una de las cuales debe ser tan independiente como sea posible de la aplicación en sí y de las restantes partes. En Java existen dos clases de módulos: las clases y los métodos. Para escribir un programa se tienen que combinar estos dos módulos. Los métodos (también llamados funciones o procedimientos en otros lenguajes de programación) son mini programas dentro de un programa. Por medio de los métodos se realizar tareas de un proyecto. Los métodos tienen las siguientes propiedades:

Un bloque de código que tiene un nombre,

Recibe unos parámetros o argumentos (opcionalmente),

Contiene sentencias o instrucciones para realizar algo (opcionalmente) y

Devuelve un valor (opcionalmente).

VI.1. Declaración de métodos

Un método es un conjunto de instrucciones a las que se les da un determinado nombre de tal manera que sea posible ejecutarlas en cualquier momento sin tenerlas que reescribir sino usando sólo su nombre. A estas instrucciones se les denomina cuerpo del método, y a su ejecución a través de su nombre se le denomina llamada al método. La ejecución de las instrucciones de un método puede producir como resultado un objeto de cualquier tipo. A este objeto se le llama valor de retorno del método y es completamente opcional, pudiéndose escribir métodos que no devuelvan ninguno. La ejecución de las instrucciones de un método puede depender del valor de unas variables especiales denominadas parámetros del método, de manera que en función del valor que se dé a estas variables en cada llamada la ejecución del método se pueda realizar de una u otra forma y podrá producir uno u otro valor de retorno.

Page 100: Fundamentos de Programación Ver 3.pdf

100

Al conjunto formado por el nombre de un método y el número y tipo de sus parámetros se le conoce como firma del método. La firma de un método es lo que verdaderamente lo identifica, de modo que es posible definir en un mismo tipo varios métodos con idéntico nombre siempre y cuando tengan distintos parámetros. Cuando esto ocurre se dice que el método está sobrecargado.

VI.2. Métodos de clase

La sintaxis:

acceso static tipo NombreDelMétodo ([Lista de Argumentos]) {

Declaración de variables del método

Sentencias del método

[return tipo;]

Donde: acceso Cada método tiene asociado un tipo que se utiliza para controlar el

acceso al método. Entre estos se encuentran: public Este método público se puede llamar de cualquier código que

tenga acceso a la clase.

private Este método privado solo puede ser llamado desde otros métodos dentro de la clase en que se definió el método privado.

protected Este método protegido se puede llamar desde otros métodos de la clase en que el método está definido y por cualquier otro método de las clases que heredan de la clase en que está definido el método. También está disponible en cualquier objeto de las clases pertenecientes al mismo paquete en donde está definida la clase.

defecto Si no especifica ningún tipo de acceso, se utiliza el acceso por defecto, esto significa que el método es accesible a todas las clases contenidas en el mismo paquete, pero no está accesible fuera de ese paquete.

static Declara el método como método de la clase y no como método del objeto (no hereda el método).

Page 101: Fundamentos de Programación Ver 3.pdf

101

Nota: Un método declarado como static solo puede ser llamado por otro método static y hacer referencia a variables static.

tipo Es el tipo de datos que regresara el método. Si se estipula un tipo de

dato void indica el método no regresa ningún valor (void indica ausencia de valor). Dentro del método para retornar el valor se utiliza la palabra reservada return y posteriormente el valor, si el tipo de dato del método se declara void no es necesario utilizar la sentencia return.

NombreDelMétodo Es el nombre que distingue al método y debe estar formado

por un identificador. Lista de Argumentos Son los valores que se pasarán al método para que realice

su tarea. Para cada argumento se tiene que declarar su tipo de dato. Por ejemplo, el siguiente método se llama suma2Numeros, recibe como argumento dos valores tipo long y regresa un valor long con la suma de los valores que recibe como parámetro.

public static long suma2Numeros( long a, long b ) {

return (a + b);

}

Llamadas a métodos (mensajes) Los objetos interactúan enviándose mensajes unos a otros. Tras la recepción de un mensaje el objeto actuará. La acción puede ser el envío de otros mensajes, el cambio de su estado, o la ejecución de cualquier otra tarea que se requiera que haga el objeto. Tipos de métodos Un método es una abstracción de una operación que puede hacer o realizarse con un objeto. Una clase puede declarar cualquier número de métodos que lleven a cabo operaciones de lo más variado con los objetos. Los métodos se clasifican en dos grupos: los métodos de instancia y los métodos de clase. Para acceder a las variables o métodos de clase se utiliza el operador punto (.). nombreClase.nombreVarClase; nombreClase.nombreMetodoClase();

Page 102: Fundamentos de Programación Ver 3.pdf

102

VI.3. Métodos de instancia

Los métodos de instancia o variables de instancia, los adquieren los objetos al ser instanciados (creados). Para declarar un método de instancia se declara sin la palabra reservada static: acceso tipo nombreMetodoInstancia (Lista de Argumentos) {

Page 103: Fundamentos de Programación Ver 3.pdf

103

Declaración de variables del método

Sentencias del método

[return tipo;]

Para acceder a las variables o métodos de instancia se utiliza el operador punto (.). Objeto.nombreVarInstancia; Objeto.nombreMetodoInstancia();

Page 104: Fundamentos de Programación Ver 3.pdf

104

Forma de pasar argumentos. Los argumentos son los valores que se pasan al método para que realice un proceso o tarea y el método recibe estos argumentos en los parámetros designados (variables). En el paso de parámetros a funciones hay dos aproximaciones clásicas: el paso por valor y paso por referencia.

Por valor: En el paso por valor se realiza una copia de los valores que se pasan, trabajando dentro del método con la copia. Es por ello que cualquier cambio que sufran dentro, no repercute fuera del método.

Por referencia: En el paso por referencia no se realiza dicha copia, por lo que las modificaciones de dentro de los métodos afectan a los parámetros y esos cambios permanecen al final del método.

En Java el paso por parámetro es por valor, aunque los efectos son de paso por referencia cuando los argumentos son objetos. ¿Cómo sucede eso? Pues es muy fácil, si un método tiene como argumento un tipo primitivo (int, float, etc...), en Java se realiza una copia para la función y cualquier cambio a dicho argumento no afecta a la variable original. Este paso de parámetros en Java está orientado a utilizar el valor de la variable para otros cálculos. En el caso de los objetos es distinto. En realidad lo que sucede es que en Java siempre tenemos referencias a los objetos. Por eso al pasar a un método como argumento un objeto, pasamos la referencia al mismo, es decir, aunque se hace una copia para el paso por valor, como lo que se copia es una referencia, los cambios al objeto referenciado sí son visibles y afectan fuera de método. La única excepción es la clase String , cuyos objetos no son mutables. Cualquier modificación de un objeto String lleva aparejada la creación de una nueva

Page 105: Fundamentos de Programación Ver 3.pdf

105

instancia del objeto. Si deseamos el mismo comportamiento para el paso de parámetros del resto de objetos, tenemos que recurrir al objeto StringBuffer. En el siguiente programa se declaran 2 variables, la primera es un arreglo de caracteres (char) y el segundo es un dato tipo int, dentro del método main se despliegan los datos antes de enviar las variables como parámetros al método Cambia. En el método Cambia, se modifica el arreglo en el subíndice 2 por el carácter ‘@’ y se multiplica el valor de la variable int por 4. Cuando termina de ejecutar el método Cambia se vuelven a desplegar las variables y se puede observar que el arreglo cambió en el subíndice 2 debido a que fue enviado como por referencia, sin embargo la variable tipo int no sufrió cambios, debido a que se mando por valor.

Page 106: Fundamentos de Programación Ver 3.pdf

106

Devolver un valor desde un método. En Java es imprescindible que a la hora de la declaración de un método, se indique el tipo de dato que ha de devolver. Si no devuelve ningún valor, se indicará el tipo void como retorno. Los métodos pueden devolver una variable u objeto, bien sea por valor (se devuelve una copia), por puntero o por referencia. Java no soporta punteros, así que no puede devolver nada por puntero. Todos los tipos primitivos en Java se devuelven por valor y todos los objetos se devuelven por referencia. El retorno de la referencia a un objeto en Java es similar a devolver un puntero a un objeto situado en memoria dinámica en C++, excepto que la sintaxis es mucho más simple en Java, en donde el item que se devuelve es la dirección de la posición en memoria dinámica donde se encuentra almacenado el objeto. Para devolver un valor se utiliza la palabra clave return. La palabra clave return va seguida de una expresión que será evaluada para saber el valor de retorno. Esta expresión puede ser compleja o puede ser simplemente el nombre de un objeto, una variable de tipo primitivo o una constante.

Page 107: Fundamentos de Programación Ver 3.pdf

107

Ejercicio 6.1: El siguiente programa lee un valor en grados Celsius y por medio de un método llamado convierteAFahrenheit convierte los grados Celsius a grados Fahrenheit.

Page 108: Fundamentos de Programación Ver 3.pdf

108

Ejercicio 6.2: El siguiente programa lee una cantidad en metros y por medio de

los métodos conversionAPies y converionApulgadas cambia el valor en metros a

pies y a pulgadas (donde 1 metro = 39.37 pulgadas y 1 pie = 12 pulgadas)

Page 109: Fundamentos de Programación Ver 3.pdf

109

Ejercicio 6.3: Una tonelada métrica equivale a 35,273.92 onzas. El siguiente

programa lee el peso de un paquete de cereal para el desayuno en onzas y

mediante el método calculaCajas determina cuantas cajas se pueden llenar con

una tonelada métrica de cereal.

Page 110: Fundamentos de Programación Ver 3.pdf

110

Ejercicio 6.4: El siguiente programa lee tres calificaciones y mediante un método

estatusPromedio determina si el alumno esta “Aprobado” o “Reprobado”.

Page 111: Fundamentos de Programación Ver 3.pdf

111

Ejercicio 6.5: El siguiente programa lee un número entero y mediante el método

NegativoCeroPositivo regrese “Positivo” si el número es positivo, “Negativo” si fue

negativo y “Cero” si fue cero.

Producto de Aprendizaje VI: Elabore los siguientes ejercicios utilizando

métodos de clase y métodos de instancia.

1. Escriba un programa que dado el total a pagar de la compra de X productos

y la cantidad de dinero entregada, calcule el vuelto que hay que dar al

cliente.

Page 112: Fundamentos de Programación Ver 3.pdf

112

2. Escriba un programa que mediante un método determine si una cadena es

palíndromo (un palíndromo es una palabra que se lee igual en sentido

directo como inverso, por ejemplo radar).

3. Escriba un programa que lea dos enteros positivos n y b que llame a un

método cambiarBase para calcular y visualizar la representación del

número n en la base b.

4. Escriba un programa que mediante un método que tome como argumentos

las longitudes de los tres lados de un triangulo (a, b y c), devuelva el área

del triangulo.

2

))()((

cbapdonde

cpbpappArea

5. Una empresa de autobuses hace viajes desde la Capital del País hacia

ciudades del interior, para lo cual dispone de dos tipos de vehículos,

pequeños y grandes, con capacidad de 20 y 60 pasajeros respectivamente.

Cada vez que parte un autobús del terminal de la ciudad Capital es anotado

el tipo de vehículo (Pequeño (P) o Grande (G)) y el número de pasajeros

que transporta.

La empresa desea un reporte al final del día con la información siguiente:

Para cada viaje:

a. El tipo de autobús: b. La cantidad de pasajeros. c. El mensaje "Ganancia" si en el autobús viaja un número de pasajeros

igual o mayor que el 50% de su capacidad, y "Pérdida" en caso contrario.

6. Elabore un programa que lea dos números y mediante un método

determine si un numero divide al otro exactamente regresando true, en

caso contrario regrese false.

7. Escriba un programa que mediante un método determine si una cadena es

palíndromo (un palíndromo es una palabra que se lee igual en sentido

directo como inverso, por ejemplo radar).

Page 113: Fundamentos de Programación Ver 3.pdf

113

8. Escriba un programa que lea dos enteros positivos n y b que llame a un

método cambiarBase para calcular y visualizar la representación del

número n en la base b.

9. Escriba un programa que tenga un método inverso que se le envíe un

argumento numérico y regrese su inverso, por ejemplo 1847, el inverso es

7481.

10. Escriba un programa que lea un valor x != 0 y por medio de método regrese

el valor de la siguiente expresión:

1

1435.1

5

x

ex

11. Escriba un programa que mediante un método que reciba dos argumentos x

y n devuelva el siguiente valor:

011

02

11

2

xsin

x

n

x

xsix

x

n

xx

nn

nn