Sunteți pe pagina 1din 15

¿Qué es la programación de computadores?

:
Esta es usada para resolver problemas de procesamiento de información, lo que permite
la comunicación con el computador para aprovechar su vasta memoria y capacidad de
cómputo, con el fin de ejecutar algoritmos que calculen una solución para cada instancia
del problema que se presente. Para que sea inteligible para el computador, un algoritmo
debe ser escrito en un lenguaje de programación, que luego será transformado en un
programa.
Problema, instancia y solución: Un problema computacional no está limitado a una
situación completamente especificada, sino que en su definición contiene elementos
variables que determinan una familia de situaciones posibles llamadas instancias del
problema. Por ejemplo, en el caso de las poblaciones, los valores de X, Y, m y n no son
especificados, lo que sugiere que resolver el problema implica proponer un método que
conduzca a la solución correcta para cada asignación posible de valores a estas variables
Un problema computacional puede entenderse entonces como una función matemática,
esto es, como una relación entre un conjunto de instancias del problema y un conjunto de
soluciones, de forma que a cada instancia le corresponde un único elemento del conjunto
de soluciones. La figura 1 presenta una descripción gráfica del concepto de problema
computacional
Algoritmo: algoritmo como un conjunto de pasos cuya ejecución transforma una instancia
de un problema en su respectiva solución. Un algoritmo debe satisfacer las siguientes
propiedades:

 Ser finito: la ejecución de un algoritmo debe tomar una cantidad de tiempo finita, esto
es, debe terminar después de un número limitado de pasos.
 Ser ordenado: los pasos que forman el algoritmo deben formar una secuencia
ordenada, de forma que en cada etapa de su ejecución el siguiente paso a seguir está
unívocamente determinado.
 Estar bien definido: cada paso del algoritmo debe tener una única interpretación para
quien lo ejecuta; esto es, el lenguaje debe ser preciso y carente de ambigüedad.
 Ser correcto: para cada instancia posible del problema, el algoritmo debe calcular su
solución correcta.
Lenguajes de programación y código fuente: Como se mencionó anteriormente, existe una
amplia brecha entre el lenguaje natural usado por los humanos y el lenguaje binario
manejado por los computadores. La solución a este problema es un conjunto de lenguajes
intermedios, denominados lenguajes de programación, los cuales son una combinación de
un subconjunto de un lenguaje natural (generalmente inglés) y el lenguaje algebraico,
suficientemente expresivo para que un programador pueda representar en él, de manera
fácil, sus algoritmos, pero también suficientemente formal para que su traducción a
lenguaje binario sea posible
El proceso de transformación de un algoritmo en un programa consiste en dos o más
pasos de traducción. Primero, el programador debe escribir su algoritmo (originalmente
en pseudocódigo, diagrama de flujo o una simple idea) en un lenguaje de programación. A
esta representación del algoritmo se le conoce como código fuente. Posteriormente, se
realiza el proceso de traducción del código fuente a lenguaje de máquina para ser
ejecutado por el computador.
Compiladores, intérpretes y programas: El proceso de traducción de instrucciones en
código fuente a instrucciones ejecutables para el computador puede ser realizado de dos
maneras distintas: por un compilador o por un intérprete. Un compilador es un programa
que toma el conjunto de instrucciones en su totalidad y genera, a partir de ellas, un
programa. Este programa es almacenado en un archivo en lenguaje binario y puede ser
ejecutado tantas veces como se desee, sin ser requerido nuevamente el código fuente

Por otra parte, un intérprete es un programa que traduce y ejecuta las instrucciones del
código fuente una a una. Los lenguajes interpretados son especialmente útiles cuando se
desea observar algunos de los resultados intermedios rápidamente. Dada la forma como
el código es procesado, la traducción a lenguaje binario ocurre cada vez que un programa
es ejecutado en los lenguajes interpretados, en contraposición a los lenguajes compilados
que crean el programa una sola vez

El lenguaje de programación Java: A la fecha, Java es el lenguaje de programación más


popular en la comunidad mundial de programadores (TIOBE, 2017). Esto obedece a las
propiedades del lenguaje, siendo las más importantes las que se resumen a continuación
(Gosling y McGilton, 1995):
Es simple: es posible aprender el lenguaje rápidamente y no se requiere de un
entrenamiento extenso para empezar a crear programas.
Es robusto: los programas creados en Java son altamente confiables debido a las
herramientas de detección de errores con que cuenta su plataforma.
Es seguro: la tecnología Java no permite que otros programas maliciosos se adhieran a sus
programas y afecten su comportamiento.
Es portable: un programa Java puede ser ejecutado en distintas configuraciones de
hardware y software, sin que ello requiera modificación alguna del programa
Es rápido: el código Java es traducido a una versión muy eficiente de sí en el lenguaje de
máquina, lo que hace que los programas Java sean rápidos comparados con programas
escritos en otros lenguajes
Proceso de compilación e interpretación de un programa Java: Anteriormente, se dijo que
el proceso de conversión de código fuente a código de máquina puede ser realizado por
un compilador o por un intérprete. En el caso particular de Java, este proceso requiere de
los dos tipos de programas Inicialmente, el programador debe escribir su programa en
uno o más archivos de código fuente usando cualquier herramienta de edición de texto.
Estos archivos deben tener extensión .java. Posteriormente, el código fuente es procesado
por el compilador Java, el cual lo traduce no directamente a código de máquina, sino a un
código intermedio llamado bytecode. Este código bytecode es almacenado en archivos del
mismo nombre pero de extensión .class. El bytecode es un lenguaje intermedio que
permite a Java mantener una versión, mucho más fácil de procesar, del programa
independiente de la arquitectura física de la máquina para ser convertida a código fuente.
Finalmente, el bytecode es procesado por un intérprete, la máquina virtual de Java, el cual
lo transforma en instrucciones en lenguaje de máquina, que son inteligibles y realizables
para el computador.

Resumen Un problema computacional puede definirse como una relación entre un


conjunto de instancias del problema y el conjunto de sus correspondientes soluciones.
Cada instancia consiste de una asignación de valores a las variables que definen el
problema. El cálculo de la solución de cualquier instancia del problema es detallado por un
algoritmo. Con el fin de aprovechar la memoria y la capacidad de procesamiento de los
computadores, un algoritmo debe ser escrito en un lenguaje de programación, para luego
ser procesado por un compilador o un intérprete que lo convertirán en instrucciones en
lenguaje de máquina que constituirán un programa. El lenguaje de programación Java es
el más usado hoy en día por los desarrolladores de todo el mundo; esto se debe a que es
un lenguaje simple, robusto, seguro, portable y rápido; hace parte de la plataforma de
desarrollo Java, la cual también incluye herramientas para facilitar y permitir el desarrollo
y ejecución de sus programas. El lenguaje Java es tanto compilado como interpretado. El
código fuente Java es traducido por un compilador al lenguaje bytecode y,
posteriormente, el intérprete convierte las instrucciones bytecode en instrucciones de
máquina que son ejecutadas por el computador.

¿Cómo se representa la información en la computadora?: Para entender cómo se


representa la información en los computadores debe comprender la estructura física de
algunos dispositivos de almacenamiento y cómputo:
2.1. El disco duro
Un disco duro consiste en un conjunto de platos magnéticos de igual tamaño, que están
alineados y giran alrededor de un mismo eje gracias a un motor. Cada plato está dividido
en pistas (discos concéntricos delgados) y, a su vez, cada pista está dividida en sectores. La
información en los sectores es escrita y leída por un cabezal (uno por cada cara de cada
plato), el cual se desplaza en dirección radial hacia adentro y hacia afuera, lo que, en
conjunto con el movimiento giratorio del plato, le permite acceder a todas las posiciones
de este.
El cabezal nunca toca la superficie del plato, sino que, desde una distancia mucho menor
al grosor de un cabello, altera o captura la orientación del campo magnético de una
sección microscópica de un sector. La orientación de dicho campo magnético puede ser
positiva o negativa

Los discos ópticos Los DVD, CD, discos Blu-ray y similares conforman el conjunto de
dispositivos de almacenamiento óptico. A diferencia de lo que ocurre en los discos duros,
un disco óptico contiene una única pista en forma de espiral; no obstante, esta no es la
principal diferencia entre los dos tipos de dispositivos. En los discos ópticos, cada una de
las secciones microscópicas que los conforman puede ser de uno de dos tipos, de acuerdo
con su relieve: pozos o llanos. Un lector de estos discos dispara haces de luz sobre las
secciones de interés y mediante un fotorreceptor captura su reflejo. A partir de esto, el
lector puede determinar si al moverse de una sección a la siguiente ocurrió un cambio de
relieve (pozo después de llano o llano después de pozo) o no. La figura 2 muestra un
fragmento de la superficie de un CD donde se observan los pozos (áreas oscuras) y los
llanos (áreas claras) que codifican la información; nótese que las secciones son parte de
una única pista en forma de espiral

Otros mecanismos de almacenamiento: Además de los dispositivos magnéticos y ópticos,


existen otros tipos de dispositivos de almacenamiento que hacen uso de diferentes
tecnologías. Las unidades de estado sólido, como los pendrives y las tarjetas SD,
almacenan la información en transistores como la existencia o ausencia de campo
eléctrico, mientras que en las ya obsoletas cintas perforadas la información era
representada mediante la existencia o ausencia de agujeros en una tira de papel

El microprocesador: Un microprocesador es la parte de un computador encargada de


realizar los cálculos aritméticos y lógicos necesarios para su operación. Estos cálculos se
logran mediante diferentes configuraciones de circuitos lógicos. La figura 3 muestra el
circuito de la unidad lógico-aritmética de un procesador de dos bits, capaz de hacer
operaciones de suma, AND, OR y XOR.
Los dispositivos de almacenamiento y cómputo representan la información por medio de
dos estados: orientación del campo magnético positiva o negativa, cambio o conservación
de relieve, existencia o ausencia de agujero, y la existencia o no de campo o corriente
eléctrica. Para contar con un esquema universal de representación de la información, cada
pareja de estados es traducida a 1 y 0
El sistema de numeración binario: El computador conoce solamente los dígitos 0 y 1, pero
estos dos son suficientes para representar cantidades de manera similar a como se hace
en el sistema decimal. Este sistema, que se describirá a continuación, es llamado sistema
binario. Es común referirse a los dígitos del sistema binario usando la palabra bit
(abreviación del término inglés binary digit)
Números naturales y enteros
En el sistema binario cada número natural es escrito como una secuencia de 1’s y 0’s. El
valor representado por la secuencia se calcula como la suma de los productos de cada
dígito por su correspondiente potencia de dos, iniciando de derecha a izquierda y en 20.
Por ejemplo, el valor 46 puede escribirse en binario como:

Números reales
Para indicar que un número tiene una parte fraccional se usa el punto (.), como sucede en
el sistema decimal. La diferencia está en que cada dígito después del punto debe ser
multiplicado por una potencia negativa de 2 y no de 10. Por ejemplo, el número 3.625 es
representado como:
Tipos de datos en Java
En programación, un dato es la unidad atómica de información. Este puede ser de
diferentes tipos: numérico, lógico, símbolo, entre otros. De acuerdo con su tipo, el
computador asigna una cantidad limitada de memoria para almacenarlo. Esta cantidad de
memoria, denominada el tamaño del tipo, corresponde a la cantidad de bits con que se
cuenta para representar el dato, independientemente del dispositivo de almacenamiento
físico. El tamaño de un tipo de dato limita la cantidad de valores diferentes que puede
tener un dato de dicho tipo. Por ejemplo, si un tipo de dato tiene un tamaño de 8 bits, el
número de valores diferentes que lo conforman es 256. En general, un tipo de tamaño n
bits contiene 2n valores distintos. A continuación, se introducen los tipos de datos
existentes en el lenguaje de programación Java, así como también sus propiedades y las
operaciones sobre ellos. Estos forman el conjunto llamado tipos de datos primitivos.
Tipos de datos para números enteros Java cuenta con cuatro tipos de datos diferentes
para representar números enteros: byte, short, int y long (Oracle Inc., 2015). La diferencia
entre ellos radica en su tamaño y, por tanto, en el rango y la cantidad de valores que
pueden ser usados en cada uno. La tabla 2 presenta las generalidades de cada tipo y la
tabla 3 resume algunos atributos de objetos del mundo real que pueden ser
representados con cada uno.
A pesar de las aplicaciones presentadas en la tabla 3, si la cantidad de datos que debe
mantener en memoria un programa no es muy grande, se prefiere usar el tipo de dato int
aún para valores pequeños.
Literales
Un literal es la representación en código Java de un valor fijo. En el caso de los valores
enteros, estos son representados usando el sistema decimal, no obstante, su
representación interna use el sistema binario. Los siguientes son ejemplos de literales Java
válidos: 123, 0, -10, -123456789, 99999999. Por defecto, todo literal entero es
interpretado como int. Esto es una causa común de errores cuando se desea usar valores
fuera del rango del tipo int esperando que sean tratados como valores de tipo long. En
este caso, debe incluirse, al finalizar el literal, la letra L para indicar que debe interpretarse
como long. Ejemplos de literales de este tipo son 100000000000000L,
98765432109876543L y -9223372036854775808L.
4.1.2. Variables
Una variable es el nombre asignado a un espacio de la memoria para albergar un dato de
un tipo específico. Adicionalmente, y como su nombre lo indica, el valor almacenado en
una variable puede cambiar durante la ejecución del programa. Se denomina declaración
de variable a la instrucción en que se indica al computador el nombre y el tipo de una
variable. La declaración de una variable tiene la siguiente sintaxis:
<tipo> <nombre>;
<tipo> es cualquier de los tipos de datos vistos hasta ahora o que verá más adelante.
<nombre> es el nombre que desea darle a la variable.
El nombre de una variable debe satisfacer las siguientes condiciones:
No puede estar ya asignado a otra variable.
No puede ser una de las palabras reservadas del lenguaje (como por ejemplo byte, short,
int o long).
Puede contener únicamente letras, dígitos, guiones bajos (_) y signos de dólar ($). El
primer símbolo del nombre no puede ser un dígito
Algunos ejemplos de declaraciones de variables (con nombres válidos) son: int salario;
byte edad; short goles_anotados; long numeroMuyGrande;
Es posible también declarar múltiples variables en una misma instrucción separando sus
nombres por comas: int poblacionTomania, poblacionBacteria, PIBTomania, PIBBacteria;
En el lenguaje Java, el punto y coma (;) indica el fin de una instrucción, de manera similar a
como el punto (.) indica el fin de una oración en español. Finalmente, se debe tener en
cuenta que en el lenguaje Java las letras en minúscula son diferentes a las letras en
mayúscula. Por tanto, Numero, numero y NuMeRo corresponden a nombres de variables
diferentes. En el mismo orden de ideas, es posible (aunque no muy recomendable) tener
una variable llamada INT.
Operador de asignación
Para asignar un valor inicial o modificar el valor contenido en una variable se usa el
operador de asignación (=). La sintaxis de este operador es la siguiente:
<nombre> = <expresión>
<nombre> corresponde al nombre de la variable cuyo valor se desea modificar y
<expresión> es cualquier expresión del mismo tipo de la variable. El operador evalúa
<expresión> y, una vez tiene el resultado, lo almacena en la variable <nombre>
Ejemplos de uso del operador de asignación son:
int salarioJuan, salarioDavid;
salarioJuan = 100000;
salarioDavid = 120000;
También es posible combinar la declaración y asignación en una misma línea, por lo que
cada uno de los dos fragmentos de código siguientes es equivalente al anterior:
int salarioJuan = 100000, salarioDavid = 120000;
int salarioJuan, salarioDavid = 120000;
salarioJuan = 100000;
Operadores aritméticos
Los tipos de datos enteros soportan las operaciones aritméticas básicas de negación,
suma, resta, multiplicación, división y residuo (módulo). La notación usada para escribir
expresiones usando estas operaciones es la notación infija, tradicionalmente usada en
matemáticas. Para agrupar fragmentos de la expresión se usa paréntesis; el uso de
corchetes o llaves no es permitido. La tabla 4 presenta las operaciones aritméticas básicas
soportadas por los tipos de datos enteros, así como los símbolos que las representan y un
ejemplo de su uso.
Tenga en cuenta que el operador de división (/) corresponde a división entera, por tanto,
su resultado será siempre entero.
4.1.5. Operadores relacionales
Además de las operaciones aritméticas, también es posible realizar operaciones de
comparación entre enteros. La tabla 5 introduce estas operaciones en el lenguaje Java.

Tipos de datos para números reales Java cuenta con dos tipos de datos para representar
números reales: float y double (Oracle Inc., 2015). La diferencia entre ellos radica en su
tamaño y, por tanto, en el rango y la cantidad de valores que pueden ser usados en cada
uno. Debido a la forma en que los números reales son representados internamente en la
computadora, cada tipo de dato puede garantizar diferente cantidad de cifras
significativas de sus valores. La tabla 6 presenta las generalidades de cada uno de estos
tipos.
Debido a la amplitud de los rangos de valores que pueden ser representados por los dos
tipos, en la gran mayoría de las aplicaciones el rango no es determinante para decidir cuál
tipo de dato usar. Esta decisión depende en general de la cantidad de datos que se desee
almacenar y la precisión de los cálculos realizados. En casos en que no se requiera una
precisión mayor a la ofrecida por el tipo float, pero la cantidad de datos a almacenar sea
pequeña, se recomienda el uso del tipo double
4.2.1. Literales
Al igual que en los enteros, los literales de tipo real en Java se representan usando el
sistema decimal. Para separar la parte entera de la parte fraccional se usa el punto (.). Por
defecto, los literales reales son interpretados como double y, similar a lo que pasa con el
tipo long, si desea que un literal sea interpretado por la máquina como de tipo float, debe
incluir al final del literal la letra F. Aunque no es necesario, por claridad del código,
también es posible incluir al final del literal la letra D para hacer énfasis en que es de tipo
double. Finalmente, cuando los números son muy grandes o muy pequeños es posible
usar notación científica para expresar los valores en forma sucinta. Para esto, se usa el
símbolo E, el cual debe ser leído como “por diez a la”. Algunos ejemplos de literales de
tipo float y double son: 1.2345F, 1.2345D, 12345E-4F, 12345E100.
4.2.2. Variables: declaración y asignación
La declaración de variables de tipos reales sigue las mismas reglas de la declaración de
variables de tipos enteros. Más aún, la sintaxis y tratamiento del operador de asignación
son idénticos.
4.2.3. Operadores aritméticos y relacionales
Los operadores aritméticos y relacionales de los tipos de datos reales son los mismos
presentados para los tipos de datos enteros en las tablas 4 y 5, con una evidente
excepción: la división entre valores reales da un cociente real y, por tanto, no existe el
concepto de residuo. Dicho de otra forma, con excepción del operador de residuo (%),
todos los operadores que existen para números enteros también aplican para números
reales.
4.3. Tipo de datos booleano
Note que las operaciones relaciones de los números no dan como resultado otro número.
Su resultado es un valor booleano. El conjunto de valores booleanos, también conocidos
como valores lógicos, está compuesto por dos elementos: verdadero y falso. Dado que la
computadora solamente es capaz de representar números, internamente un valor
booleano se representa con un número entero que es interpretado por la máquina como
falso o verdadero de acuerdo a si es igual o diferente de 0, respectivamente. El tipo de
dato Java para valores booleanos es boolean (Oracle Inc., 2015). Un dato de tipo boolean
puede ocupar desde 8 hasta 32 bits de memoria. Esto se debe a temas propios del diseño
del lenguaje que están fuera del alcance de esta Lectura fundamental.
4.3.1. Literales Java cuenta con dos palabras reservadas como literales del tipo
boolean:true para verdadero y false para falso. Es importante recordar que Java es
sensible a las minúsculas y mayúsculas y por tanto TRUE y FALSE no son tomados como
literales booleanos.
4.3.2. Variables: declaración y asignación
La declaración de variables de tipo lógico sigue las mismas reglas de la declaración de
variables de tipos numéricos. Más aún, la sintaxis y tratamiento del operador de
asignación son idénticos.
4.3.3. Operadores lógicos
El tipo boolean soporta las operaciones lógicas de conjunción, disyunción, negación,
equivalencia y disyunción exclusiva. En la tabla 7 se exponen estas operaciones lógicas, así
como los símbolos que las representan y un ejemplo de su uso.

4.4. Precedencia de operadores


Los operadores aritméticos, relacionales y lógicos de los tipos de datos anteriormente
presentados pueden ser combinados en una única expresión bien definida. Para poder
evaluar la expresión de acuerdo con la intención del programador, la computadora
requiere de un conjunto de reglas que le indiquen en qué orden deben realizarse las
operaciones y así suprimir la ambigüedad del lenguaje. Dichas reglas se resumen a
continuación

 Todo conjunto de operaciones que se encuentre comprendido entre una pareja de


paréntesis debe realizarse primero que las operaciones fuera de los paréntesis.
 En ausencia de paréntesis, el orden en que deben realizarse las operaciones es el
indicado en la tabla 8 (Oracle Inc., 2015).
 Si dos operaciones se encuentran en el mismo nivel en la tabla 8, se realizará primero
la que aparece primero de izquierda a derecha en la expresión

Resumen
Independientemente de su estructura física, los dispositivos de almacenamiento y
procesamiento de información comunes representan la información mediante dos
estados: orientación de campo magnético positiva o negativa, cambio o conservación de
relieve, existencia de agujero, existencia de campo o corriente eléctrica, entre otros. El
lenguaje binario permite unificar el esquema de representación de estos dispositivos
reduciendo las parejas de estados a los símbolos 1 y 0.
El sistema binario representa cantidades tanto enteras como reales de manera similar a
como se hace en el sistema decimal. Cada dígito de una secuencia binaria es llamado bit,
palabra que resulta de abreviar el término inglés binary digit. Java cuenta con un conjunto
amplio de tipos de datos que incluyen los conjuntos numéricos básicos y el conjunto de
valores booleanos:

 Los tipos de datos enteros son: byte, short, int y long. La principal diferencia entre
ellos radica en el espacio que ocupan en memoria y, por tanto, en el rango de valores
diferentes que pueden representar.
 Los tipos de datos reales son: float y double. Además de la extensión del rango de
valores que manejan, una diferencia fundamental entre estos dos tipos de datos es la
cantidad de cifras significativas que mantienen del número.
 El nombre del tipo de dato booleano en Java es boolean. Dado que, por su
arquitectura física, el computador solamente puede representar números, un
booleano internamente no es más que un número que representa falso o verdadero
de acuerdo a si es igual o diferente de cero, respectivamente.
Los datos en un programa Java pueden ser valores fijos explícitos en el código fuente,
llamados literales o variables. Una variable es el nombre asignado a un espacio de la
memoria para albergar un dato de un tipo específico. El valor almacenado en una variable
puede ser modificado durante la ejecución del programa mediante el operador de
asignación

S-ar putea să vă placă și