Programacion OO

16
I.S.C. Salvador Cruz Alfaro Apuntes: Fundamentos de Programación Instituto Tecnológico Superior de la Sierra Negra de Ajalpan Página | 55 4 Introducción a la programación 4.1 Clasificación del software. 4.1.1 Software del sistema. Al resultado de la programación de sistemas se le conoce como software de base o software de sistemas. Al software de sistemas pertenecen los programas cuya finalidad es servir a otros programas y ejecutar funciones comunes para todos los usuarios de la computadora. El software de sistemas implementa funciones de control que permiten al software de aplicación comunicarse con otros elementos del software. Entre los programas que pertenecen al software de sistemas se encuentran: los sistemas operativos , compiladores , ensambladores , cargadores, manejadores de bases de datos, etc. 4.1.2 Software de aplicación. El software de aplicación implementa los procedimientos requeridos para realizar las funciones de procesamiento de la información. El software de aplicación es el software específico para aplicaciones particulares de los usuarios de un sistema de cómputo. Su utilización se restringe a cierto ámbito( a diferencia del software de sistemas). Normalmente, en la codificación del software de aplicación no se utiliza un lenguaje de bajo nivel, sino que se codifican en lenguajes de alto nivel y se traducen ya sea por compiladores o por intérpretes (los cuales forman parte del software de sistemas). Podemos decir que el software de aplicación se apoya en el software de sistemas, lo cual no puede decirse en sentido inverso. En lo que sigue del curso desarrollaremos software de aplicación, utilizando un compilador (software de base) para el lenguaje C# (C Sharp). 4.2 Conceptos de la programación. 4.2.1 Definición de programa. Un programa es un conjunto de instrucciones internas, utilizadas para ejecutarse en una computadora y producir un resultado concreto. 4.2.2 Definición de programación. La programación es el proceso de escribir programas para computadora. Generalmente, los programas para computadora se escriben en lenguajes de alto nivel o en lenguaje ensamblador (bajo nivel). 4.2.3 Definición de lenguaje de programación. Para que una computadora pueda ejecutar una instrucción, ésta debe estar escrita en un lenguaje que "entienda" la máquina. La máquina está compuesta por circuitos eléctricos. Originalmente, la programación de las computadoras se hacía abriendo y cerrando los circuitos de éstas. Para introducir las órdenes en la computadora sólo se podían manejar dos estados con cada circuito: "cerrado" y "abierto" (esto es, con corriente y sin corriente). Debido a que la introducción de instrucciones con apertura y cierre de circuitos por métodos manuales era muy lento, se inventó el concepto de programa. Para escribir los

description

Documentos

Transcript of Programacion OO

Page 1: Programacion OO

I.S.C. Salvador Cruz Alfaro Apuntes: Fundamentos de Programación

Instituto Tecnológico Superior de la Sierra Negra de Ajalpan P á g i n a | 55

4 Introducción a la programación

4.1 Clasificación del software.

4.1.1 Software del sistema.

Al resultado de la programación de sistemas se le conoce como software de base o software de

sistemas. Al software de sistemas pertenecen los programas cuya finalidad es servir a otros programas y

ejecutar funciones comunes para todos los usuarios de la computadora.

El software de sistemas implementa funciones de control que permiten al software de aplicación

comunicarse con otros elementos del software.

Entre los programas que pertenecen al software de sistemas se encuentran: los sistemas operativos ,

compiladores , ensambladores , cargadores, manejadores de bases de datos, etc.

4.1.2 Software de aplicación.

El software de aplicación implementa los procedimientos requeridos para realizar las funciones de

procesamiento de la información. El software de aplicación es el software específico para aplicaciones

particulares de los usuarios de un sistema de cómputo. Su utilización se restringe a cierto ámbito( a diferencia

del software de sistemas). Normalmente, en la codificación del software de aplicación no se utiliza un lenguaje

de bajo nivel, sino que se codifican en lenguajes de alto nivel y se traducen ya sea por compiladores o por

intérpretes (los cuales forman parte del software de sistemas). Podemos decir que el software de aplicación se

apoya en el software de sistemas, lo cual no puede decirse en sentido inverso.

En lo que sigue del curso desarrollaremos software de aplicación, utilizando un compilador (software de

base) para el lenguaje C# (C Sharp).

4.2 Conceptos de la programación.

4.2.1 Definición de programa.

Un programa es un conjunto de instrucciones internas, utilizadas para ejecutarse en una computadora

y producir un resultado concreto.

4.2.2 Definición de programación.

La programación es el proceso de escribir programas para computadora. Generalmente, los programas

para computadora se escriben en lenguajes de alto nivel o en lenguaje ensamblador (bajo nivel).

4.2.3 Definición de lenguaje de programación.

Para que una computadora pueda ejecutar una instrucción, ésta debe estar escrita en un lenguaje que

"entienda" la máquina. La máquina está compuesta por circuitos eléctricos.

Originalmente, la programación de las computadoras se hacía abriendo y cerrando los circuitos de éstas.

Para introducir las órdenes en la computadora sólo se podían manejar dos estados con cada circuito: "cerrado"

y "abierto" (esto es, con corriente y sin corriente). Debido a que la introducción de instrucciones con apertura y

cierre de circuitos por métodos manuales era muy lento, se inventó el concepto de programa. Para escribir los

Page 2: Programacion OO

I.S.C. Salvador Cruz Alfaro Apuntes: Fundamentos de Programación

Instituto Tecnológico Superior de la Sierra Negra de Ajalpan P á g i n a | 56

programas, se convino en que un 0 (cero) significaría "abierto" (esto es, sin corriente), y un 1 (uno) significaría

"cerrado" (esto es, con corriente). Con la invención del transistor el concepto de "cerrado" se cambió a "alto

voltaje" y el de abierto a "bajo voltaje" . Actualmente, el alto voltaje es un valor cercano a 5 voltios, y el bajo

voltaje uno cercano a 2 voltios.

Se necesita un grupo de varios circuitos para representar cada carácter de un lenguaje humano, y varios

grupos para representar una palabra. Así que escribir conjuntos de instrucciones (programas) implica largas

cadenas de unos y ceros, con una alta probabilidad de cometer errores (y una gran dificultad para corregirlos).

Para facilitar la escritura de programas, se inventaron los lenguajes de programación "de bajo nivel"

(ensambladores) con nemotécnicos de palabras de un lenguaje humano y, posteriormente, los "de alto nivel"

que utilizan palabras completas. La escritura de programas en lenguajes diferentes al de la máquina hace

necesario el uso de programas traductores (ensambladores, compiladores e intérpretes)

Podemos definir a un lenguaje de programación como un lenguaje que está formado por un subconjunto

de símbolos y palabras pertenecientes a un lenguaje natural. Aunque el lenguaje natural comúnmente utilizado

para crear lenguajes de programación es el inglés, con UNICODE es posible usar caracteres de todos los

lenguajes naturales existentes.

4.3 Datos.

4.3.1 Definición.

Dato

Representación formal de hechos, conceptos o instrucciones adecuada para su comunicación,

interpretación y procesamiento por seres humanos o medios automáticos.

4.3.2 Tipos de datos.

Tipo de dato

Especificación de un dominio (rango de valores) y de un conjunto válido de operaciones a los que

normalmente los traductores asocian un esquema de representación interna propio.

Clasificación de los tipos de datos

En función de quién los define:

Tipos de datos estándar

Tipos de datos definidos por el usuario

Page 3: Programacion OO

I.S.C. Salvador Cruz Alfaro Apuntes: Fundamentos de Programación

Instituto Tecnológico Superior de la Sierra Negra de Ajalpan P á g i n a | 57

En función de su representación interna:

Tipos de datos escalares o simples

Tipos de datos estructurados

Tipos de datos primitivos en Java

El lenguaje Java define 8 tipos de datos primitivos:

Números enteros

byte, short, int, long

4 tipos básicos para representar números enteros (con signo):

Page 4: Programacion OO

I.S.C. Salvador Cruz Alfaro Apuntes: Fundamentos de Programación

Instituto Tecnológico Superior de la Sierra Negra de Ajalpan P á g i n a | 58

Literales enteros

Los literales enteros pueden expresarse:

En decimal (base 10): 255

En octal (base 8): 0377 �3 ∗ 8� � 7 ∗ 8� � 7 255�

En hexadecimal (base 16): 0xff �15 ∗ 16� � 15 255

Los literales enteros son de tipo int por defecto ������ � 2�� � 2�� � 1�

Un literal entero es de tipo long si va acompañado del sufijo l o L:

1234567890L es de tipo long

Nota: Se prefiere el uso de L porque l (L minúscula) puede confundirse con 1 (uno).

Números en coma flotante

float double

Según el estándar IEEE 754-1985

Literales reales

Cadenas de dígitos con un punto decimal

123.45 0.0 0.001

En notación científica �������� 10���� � !��

123�45 123# � 45 12# � 6

Por defecto, los literales reales representan valores de tipo doublé.

Para representar un valor de tipo float, hemos de usar el sufijo f o F:

123.45F 0.0f 0.001f

Page 5: Programacion OO

I.S.C. Salvador Cruz Alfaro Apuntes: Fundamentos de Programación

Instituto Tecnológico Superior de la Sierra Negra de Ajalpan P á g i n a | 59

Caracteres

char

Literales de tipo carácter

Valores entre comillas simples

‘a’ ‘b’ ‘c’ … ‘1’ ‘2’ ‘3’ … ‘*’ …

Códigos UNICODE (en hexadecimal): \u????

‘\u000a’ (avance de línea)

‘\u000d’ (retorno de carro)

Secuencias de escape para representar caracteres especiales:

La clase Character define funciones (métodos estáticos) para trabajar con caracteres:

isDigit(), isLetter(), isLowerCase(), isUpperCase()

toLowerCase(), toUpperCase()

Page 6: Programacion OO

I.S.C. Salvador Cruz Alfaro Apuntes: Fundamentos de Programación

Instituto Tecnológico Superior de la Sierra Negra de Ajalpan P á g i n a | 60

Datos de tipo booleano

boolean

Representa algo que puede ser verdadero (true) o falso (false).

Literales

Cadenas de caracteres

La clase String

String no es un tipo primitivo, sino una clase predefinida

Una cadena (String) es una secuencia de caracteres

Las cadenas de caracteres, en Java, son inmutables: no se pueden modificar los caracteres individuales de la

cadena.

Literales

Texto entra comillas dobles “ ”

“Esto es una cadena”

“‘Esto’ también es una cadena”

Las secuencias de escape son necesarias para introducir determinados caracteres dentro de una cadena:

“\”Esto es una cadena entre comillas\””

Concatenación de cadenas de caracteres

El operador + sirve para concatenar cadenas de caracteres

Si cualquier operando es un String, toda operación se convierte en una concatenación de cadenas.

En java cualquier cosa puede convertirse automáticamente en una cadena de caracteres (un objeto de tipo String).

Page 7: Programacion OO

I.S.C. Salvador Cruz Alfaro Apuntes: Fundamentos de Programación

Instituto Tecnológico Superior de la Sierra Negra de Ajalpan P á g i n a | 61

4.3.3 Identificadores.

Una variable no es más que un nombre simbólico que identifica una dirección de memoria:

“Suma el contenido de la posición 3001 y la 3002 y lo almacenas en la posición 3003”

VS

total = cantidad1 + cantidad2

“Suma cantidad1 y cantidad2 y lo almacenas en total”

Declaración de variables

Para usar una variable en un programa hay que declararla.

El ordenador conoce así cómo codificar la información que se va a almacenar en la posición de memoria

correspondiente.

Al declarar una variable, se reserva el espacio de memoria necesario para almacenar un valor del tipo de la

variable.

El identificador asociado a la variable se puede utilizar para acceder al dato almacenado en memoria y para

modificarlo.

Page 8: Programacion OO

I.S.C. Salvador Cruz Alfaro Apuntes: Fundamentos de Programación

Instituto Tecnológico Superior de la Sierra Negra de Ajalpan P á g i n a | 62

Declaración de variables en Java

<tipo> identificador;

<tipo> lista de identificadores;

Las variables se han de declarar antes de poder usarlas.

Los identificadores de las variables son los nombres que utilizaremos para referirnos a ellas.

Al declarar una variable, hay que definir su tipo: la variable sólo admitirá valores del tipo especificado.

En una misma declaración se pueden declarar varias variables, siempre que sean del mismo tipo. En este

caso, los identificadores de las variables se separan por comas.

Ejemplos:

Page 9: Programacion OO

I.S.C. Salvador Cruz Alfaro Apuntes: Fundamentos de Programación

Instituto Tecnológico Superior de la Sierra Negra de Ajalpan P á g i n a | 63

Identificadores en Java

El primer símbolo del identificador será un carácter alfabético (a, …, z, A, …, Z, ‘_’, ‘$’) pero no un dígito. Después

de ese primer carácter, podremos poner caracteres alfanuméricos (a, …, z) y (0, 1, …, 9), signos de dólar ‘$’ o

guiones de subrayado ‘_’.

Los identificadores no pueden coincidir con las palabras reservadas, que ya tienen significado en Java:

Las mayúsculas y las minúsculas se consideran diferentes.

‘$’ y ‘_’ se interpretan como una letra más.

‘$’ no se suele utilizar en la práctica (lo usa el compilador).

Ejemplos válidos

a, pepe, r456, tu_re_da, AnTeNa, antena, usd$

Ejemplos no válidos

345abc, mi variable, Nombre.Largo, cañada, camión

Convenciones

Los identificadores deben ser descriptivos: deben hacer referencia al significado de aquello a lo que se refieren.

int n1, n2; // MAL

int anchura, altura; // BIEN

Los identificadores asociados a las variables se suelen poner en minúsculas.

int CoNTaDoR; // MAL

int contador; // BIEN

Cuando el identificador está formado por varias palabras, la primera palabra va en minúsculas y el resto de

palabras se inician con una letra mayúscula.

int mayorvalor; // MAL

int mayor_valor; // ACEPTABLE

int mayorValor; // MEJOR

Page 10: Programacion OO

I.S.C. Salvador Cruz Alfaro Apuntes: Fundamentos de Programación

Instituto Tecnológico Superior de la Sierra Negra de Ajalpan P á g i n a | 64

Inicialización de las variables

En una declaración, las variables se pueden inicializar:

int i = 0;

float pi = 3.1415927f;

double x = 1.0, y = 1.0;

NOTA: La inicialización puede consistir en una expresión compleja que se evalúa cuando se ejecuta el

programa.

Definición de constantes en Java

Una constante hace referencia a un valor que no puede modificarse

final <tipo> identificador = <valor>;

Las constantes se definen igual que cuando se declara una variable y se inicializa su valor.

Con la palabra reservada final se impide la modificación del valor almacenado

Convenciones

Los identificadores asociados a las constantes se suelen poner en mayúsculas.

final double PI = 3.141592;

Si el identificador está formado por varias palabras, las distintas palabras se separan con un guión de

subrayado.

final char RETORNO_DE_CARRO = ‘\n’; final double ELECTRONIC_CHARGE = 1.6E-19;

Page 11: Programacion OO

I.S.C. Salvador Cruz Alfaro Apuntes: Fundamentos de Programación

Instituto Tecnológico Superior de la Sierra Negra de Ajalpan P á g i n a | 65

4.3.4 Almacenamiento, direccionamiento y representación en memoria.

Almacenamiento

La computadora posee determinada cantidad de almacenamiento interno denominado memoria

principal, memoria RAM o memoria volátil. Esta memoria se activa al encender la computadora y se desactiva

al apagarla. Para que un programa se ejecute, debe cargarse en la memoria principal, así como los datos

necesarios. Como es más costosa, es un recurso escaso donde sólo se almacenan los datos que se requieren de

inmediato, y los demás se relegan a los dispositivos de almacenamiento externo, donde la capacidad de

almacenamiento es mayor, pero también el tiempo de recuperación. Por otra parte, el costo del

almacenamiento externo es más bajo.

Direccionamiento

La memoria principal de la computadora se divide en pequeñas unidades de tamaño uniforme

denominadas palabras, que tienen una dirección única.

Cada una de éstas palabras es capaz de almacenar una unidad de información (como, por ejemplo,

resultados numéricos), y determina el número más grande y el más pequeño que puede almacenar.

El tamaño de la palabra depende de la computadora, pero siempre se especifica en múltiplos de 8 bits.

Así, existen computadoras con tamaños de palabra de 8, 16, 32 y 64 bits.

Cada palabra de la memoria principal tiene una dirección fija que va de cero hasta el número total de

palabras - 1. Las direcciones de memoria sirven para identificar cada palabra individualmente, de tal manera

que pueda accederse al dato contenido en ella. A fin de simplificar su comprensión, las memorias se consideran

como una hilera de palabras.

Por ejemplo, suponiendo que la memoria principal de una computadora tiene un tamaño de palabra de

8 bits, la cinta de color amarillo que se muestra enseguida podría representar las tres primeras palabras:

Dirección Valor en decimal

0000 0 1 0 0 1 0 1 1 75

0001 0 1 0 0 0 0 0 1 65

0002 0 0 1 1 0 0 1 0 50

Palabra

Representación en memoria

La representación en memoria de los caracteres no reviste mayor complicación, debido a que los

códigos utilizados, como el ASCII (American Standard Code for Information Interchange), les asignan valores

enteros positivos.

En el caso de los datos numéricos hay que considerar la distinción entre números negativos y positivos,

y la que hay entre números de punto flotante y enteros.

Los signos se manejan normalmente mediante el bit más significativo de la palabra (el situado a la

extrema izquierda), y se le denomina bit de signo. Cuando el bit de signo almacena un cero, el número se

Page 12: Programacion OO

I.S.C. Salvador Cruz Alfaro Apuntes: Fundamentos de Programación

Instituto Tecnológico Superior de la Sierra Negra de Ajalpan P á g i n a | 66

considera positivo; cuando almacena un uno el número es negativo. Es por esto que, si el tamaño de la palabra

es de m bits, quedan m-1 bits para representar la magnitud del número almacenado.

Los números de punto flotante se manejan en formato logarítmico, con un número fijo de bits para la

base y otro para la mantisa. El estándar para los números de punto flotante lo fija el IEEE.

Debido al formato logarítmico, los cálculos que se hacen con tipos de punto flotante no son tan

precisos como los que se hacen con tipos enteros.

4.3.5 Sistema de numeración binaria y hexadecimal.

Sistema de numeración binario

Las memorias de las computadoras se componen de microcircuitos que son capaces de conducir bajo

voltaje (aprox. 2 voltios) y alto voltaje (aprox. 5 voltios). Estos dos estados se representan con los símbolos 0 y

1. A este sistema de numeración que utiliza dos símbolos se le denomina binario, y a los dígitos 0 y 1 se les

denomina dígitos binarios o simplemente bits (binary digits).

Nuestro sistema de numeración decimal toma su nombre de los diez únicos símbolos (0, 1, 2, 3, 4, 5, 6,

7, 8, 9) que pertenecen al código.

Esta diferencia entre los dos sistemas de numeración complica la comunicación entre las personas y las

computadoras.

Para resolver el problema se requiere convertir de un sistema a otro para codificar la información.

Sistema hexadecimal

Al sistema que utiliza 16 símbolos se le denomina hexadecimal. Los símbolos hexadecimales y sus

equivalentes en binario y decimal se muestran en la siguiente tabla.

Hex Bin Dec

0 0000 0

1 0001 1

2 0010 2

3 0011 3

4 0100 4

5 0101 5

6 0110 6

7 0111 7

8 1000 8

9 1001 9

A 1010 10

B 1011 11

C 1100 12

D 1101 13

E 1110 14

F 1111 15

Page 13: Programacion OO

I.S.C. Salvador Cruz Alfaro Apuntes: Fundamentos de Programación

Instituto Tecnológico Superior de la Sierra Negra de Ajalpan P á g i n a | 67

Por ejemplo, en el código ASCII la letra 'Y' tiene asociado el número decimal 89. Si queremos manejar la

letra 'Y' con la computadora, necesitamos comunicarle el código de la letra (89) en el sistema de numeración

que ella entiende, esto es, convertir el número 89 a binario.

La conversión se logra tomando en cuenta que cada dígito tiene asociado un peso que depende de su

posición en la secuencia de símbolos en la cifra.

Así, el número 89 puede expresarse como 9x10 elevado a la potencia 0 + 9x10 elevado a la potencia 1,

esto es: 9x1 + 8x10.

Para convertir de binario a decimal podemos utilizar la siguiente tabla:

7 6 5 4 3 2 1 0 Exponente

1 1 1 1 1 1 1 1 Binario

128 64 32 16 8 4 2 1 Valor decimal

7 6 5 4 3 2 1 0 Exponente

1 1 1 1 1 1 1 1 Binario

128 64 32 16 8 4 2 1 Valor

decimal

De la tabla anterior, podemos escribir el 89 en binario como:

89 = 01011001 = 64 + 16 + 8 +1

A la inversa, si tuvieramos la serie de dígitos binarios 01011001 y quisieramos conocer su equivalencia en

decimal, escribiríamos:

0x2^7+1x2^6+0x2^5+1x2^4+1x2^3+0x2^2+0x2^1+1x2^0=

= 0 + 1x64 + 0 + 1x16+ 1x8 + 0 + 0 + 1x1 =

= 64 + 16 + 8 + 1 = 89

Page 14: Programacion OO

I.S.C. Salvador Cruz Alfaro Apuntes: Fundamentos de Programación

Instituto Tecnológico Superior de la Sierra Negra de Ajalpan P á g i n a | 68

La conversión del número hexadecimal F9B5 a decimal sería:

F9B5 = Fx16^3 + 9x16^2 + Bx16^1 + 5x16^0

= 15x16x16x16 + 9x16x16 + 11x16 +5x1 =

= 61,440 + 2,304 + 176 + 5

= 63,925

--------------------------------------------------------------------------------

En general, la conversión al sistema decimal del número abcde de un sistema numérico de base n es:

a x n^4 + b x n^3 + c x n^2 + d x n^1 + e x n^0

Page 15: Programacion OO

I.S.C. Salvador Cruz Alfaro Apuntes: Fundamentos de Programación

Instituto Tecnológico Superior de la Sierra Negra de Ajalpan P á g i n a | 69

4.4 Operadores, operandos y expresiones.

Operadores aritméticos Java incluye cinco operadores para realizar operaciones aritméticas:

Operador Operación

+ Suma

- Resta

* Multiplicación

/ División

% Módulo (resto de la división)

Si los operandos son enteros, se realizan operaciones enteras.

En cuanto uno de los operandos es de tipo float o double, la operación se realiza en coma flotante.

No existe un operador de exponenciación: para calcular x hay que utilizar la función Math.pow(x,a)

División ( / )

Operación Tipo Resultado

7/3 int 2

7/3.0f float 2.33333333f

5.0/2 double 2.5

7.0/0.0 double +Infinity

0.0/0.0 double NaN

Si se dividen enteros, el resultado es entero y el resto se pierde.

Una división entera por cero produce una excepción.

Una división por cero, en coma flotante, produce Infinite o NaN.

Módulo ( % ) o resto de dividir

Operación Tipo Resultado

7%3 int 1

4.3%2.1 Doublé ~ 0.1

Page 16: Programacion OO

I.S.C. Salvador Cruz Alfaro Apuntes: Fundamentos de Programación

Instituto Tecnológico Superior de la Sierra Negra de Ajalpan P á g i n a | 70

Operadores relacionales

Operadores de comparación para números y caracteres. Generan un resultado booleano.

Operador Significado

== Igual a

!= Diferente que

< Menor que

> Mayor que

<= Menor o igual

>= Mayor o igual

Ejemplos

Comparación Resultado

25<=25 True

25<>25 False

25<>4 True

25==25 True

56==2 False

Operadores lógicos/booleanos

Operandos booleanos. Tienen menos precedencia que los operadores de comparación.

Operador Nombre Significado

! NOT Negación lógica

&& AND “y” lógico

|| OR “o” inclusivo

^ XOR “o” exclusivo

NOT (!) cambia el valor booleano.

AND (&&) devuelve true si los dos son operandos son true. No evalúa el segundo operando si el

primero es false

OR (||) devuelve false si los dos son false. No evalúa el segundo operando si el primero es true. Si uno

de los dos es true, devuelve true.

XOR (^) devuelve true si los dos operandos son diferentes. Con operandos booleanos es equivalente a

!=.

Ejemplos

Número x entre 0 y 10 �0 $ %� && �% $ 10�

Número x fuera del intervalo [0,10]

! (�0 ) %�&&�% ) 10�*

ó

�0 + %� | |�% + 10�