Você está na página 1de 112

CAPITULO 1

Qu es la informtica?
Ciencias de la Computacin se define de diferentes maneras por
diferentes autores.
Wikipedia (http://en.wikipedia.org/wiki / Computer_science) define la
informtica como la conjunto de una variedad de disciplinas relacionadas
con la informtica, tanto terica como prctica: fundamentos tericos de
la informacin y la computacin, teora de lenguajes, anlisis y el
desarrollo de algoritmos, la implementacin de sistemas de computacin,
grficos por computadora, bases de datos, comunicaciones de datos, etc.
La Oficina Nacional de Coordinacin de los EE.UU. para Desarrollo y la
investigacin de redes y tecnologa de la informacin (NITRD) define la
informtica en una forma amplia de manera similar:
El estudio sistemtico de la informtica y los sistemas de
cmputo. El cuerpo de los conocimientos resultantes de esta
disciplina contiene teoras para la comprensin de los
sistemas de computacin y mtodos; diseo de la metodologa,
algoritmos, herramientas y mtodos para el ensayo de
conceptos, mtodos de anlisis y verificacin, y la
representacin del conocimiento y la aplicacin.
(http://www.nitrd.gov/pubs/bluebooks/1995/section.5.html)
Otra definicin amplia viene de la Association for Computing Machinery
(ACM) modelo de plan de estudios. Se dice que la informtica es el
"estudio de las computadoras y los procesos algortmicos, incluidos sus
principios, su hardware y software de diseo, sus aplicaciones y su
impacto en la sociedad ".
Una famosa definicin de la informtica por Gibbs y Tucker (Gibbs y
Tucker, "Un modelo de programa de estudios para un Licenciado en Artes
Liberales en Ciencias de la Computacin ", Com. de la ACM, vol. 29, no.
3, marzo de 1986) hace hincapi en la anlisis y elaboracin de
algoritmos como el eje central de la informtica.
Tambin es justo preguntar, "Cmo la informtica es una ciencia?" En
contraste con la fsica, la biologa, y qumica, ciencias de la
computacin no se basa en el estudio del mundo natural. En ese sentido,
la informtica es
ms que las matemticas como ciencia. Algunos
sostienen que la informtica es realmente arte de la computadora (donde
"el arte" significa prctica). Por otro lado, los cientficos utilizan
el mtodo cientfico para proponer y probar hiptesis, y algunos
descubrimientos muy no-obvios en ciencias de la computacin tienen
importantes consecuencias en el mundo real.
Un ejemplo, que se discutir ms tarde, es el descubrimiento de que
algunos problemas importantes simplemente no pueden ser resueltos
por computacin.
A pesar de las muchas variaciones, esencialmente todas las definiciones
de la informtica hacen hincapi en el estudio de los algoritmos.

Los algoritmos, en una u otra forma, son fundamentales para la


informtica. La Informtica combina conceptos tericos de anlisis y
diseo de algoritmo con las consideraciones prcticas de cmo
implementar los algoritmos en una computadora y resolver problemas
prcticos.
Un algoritmo define una detallada e inequvoca secuencia de acciones
para la solucin de un problema particular o para realizar algunas
tareas. Si alguna vez has seguido una receta de cocina, seguido un
conjunto de rutas de manejo, o llenar un formulario de impuesto sobre la
renta, tu has trabajado con un algoritmo.
Por ejemplo, en algn momento, usted probablemente se ensea la forma de
determinar el mximo comn divisor (GCD) de dos nmeros. En caso de que
usted ha olvidado, el GCD de dos nmeros enteros positivos es el mayor
entero que incluso es un divisor de ambos nmeros. Por ejemplo, la GCD
de 42 y 30 es 6. El algoritmo que se indica a continuacin pueden ser
utilizados para calcular la GCD de dos enteros positivos A y B:
Si b es igual a cero, entonces el GCD de A y B es a. Algoritmo termina.
Conjunto de r resto que se obtiene de la divisin entera de A y B.
Repita este proceso usando la b y r.
Considere la posibilidad de calcular el GCD de 42 y 30. Vamos a = 42 y b
= 30. Empezamos el proceso en el paso 1 del algoritmo. Dado que b no es
cero, se procede al paso 2. En el paso 2 que calcular el resto cuando 42
es dividido por 30, que es de 12. Paso 3 nos indica a repetir el
proceso, esta vez utilizando 30 y 12. Por lo tanto, en este segundo
viaje a travs del proceso a es ahora un 30 y b es ahora 12. Dado que b
no
es
cero,
calcular
el
resto
de
los
30
y
12, que es de 6, y repita el proceso usando la 12 y 6. Al igual que
antes,
ya
que
b
no
es
cero,
calcular
el
resto
de 12 y 6 y llegar a cero. Ahora vamos a repetir el proceso usando el 6
y 0. Esta vez, ya que b es ahora cero, llegamos a la conclusin de que
el GCD de 42 y 30 es de 6.
Los algoritmos son esenciales en la manera en que las computadoras
procesan la informacin debido a que un programa de computadora es
bsicamente un formato electrnico de un algoritmo que le dice a la
computadora qu medidas concretas a realizar para llevar a cabo una
determinada tarea. Con el fin de estudiar una forma electrnica de un
algoritmo, un cientfico en computadoras tambin debe entender la
computadora que se utilizar para ejecutar los pasos del algoritmo. El
trmino hardware se utiliza para describir el desarrollo fsico,
partes tangibles de una computadora. Un teclado, mouse, placa base,
tarjeta grfica, y el procesador son todos ejemplos de equipos de
computacin.
As como un conductor de carreras para entender las necesidades de las
capacidades y limitaciones del vehculo que conduce, un cientfico de
computacin tambin debe comprender la plataforma de hardware sobre la
cual los algoritmos de clculo sern implementados.
No es suficiente slo para "conocer cmo manejar" en el caso del
conductor de carreras, y no basta
a "conocer los algoritmos de" para
ser un cientfico de la computacin. Un algoritmo que es ptimo para una
plataforma de hardware no puede ser ptima en otro.
Los algoritmos son generalmente expresados en una forma que pueda ser
fcilmente comprendido por un ser humano. Por ejemplo, el algoritmo dado

anteriormente para calcular la GCD de dos nmeros fue escrito usando el


idioma Ingls de manera que sera fcil para usted de entender. Aunque
usted puede comprender ms de un idioma, el nico idioma que entiende un
computadora es lenguaje de mquina. Lenguaje de mquina es un sistema de
cdigos que el equipo est diseado para interpretar. Cada palabra en
lenguaje de mquina representa una simple accin que puede ser llevada a
cabo por el equipo. Por ejemplo, la instruccin de lenguaje de mquina
"aadir" instruye a la computadora para sumar dos nmeros. (En Cap. 3
sobre Organizacin de la Computadora, vamos a explicar en lenguaje de
mquina con mucho ms detalle.) El conjunto de instrucciones que, cuando
ejecutados por un computadora, ejecuta los pasos de un algoritmo se
llama un programa.
Es difcil para los seres humanos para trabajar directamente con el
lenguaje de mquina. Las palabras de instruccin mquina consisten en
filas de unos y ceros, por lo general, 8, 16, 32, o 64 bits de largo, y,
a veces, de longitud variable. Dado que las personas tienen
dificultades
para
la
manipulacin
de
estos
extraos
cdigos
directamente, los lenguajes de computacin se han desarrollado para
facilitar la proceso de convertir un algoritmo en una forma que el
equipo puede actuar en consecuencia. Nos referimos a estas lenguajes
como lenguajes de alto nivel, porque los lenguajes han sido diseados
para permitir a los seres humanos trabajar en un "nivel superior"
que en el nivel de unos y ceros de la computadora. Lenguaje de mquina,
por otra parte, se denomina a menudo un lenguaje de bajo nivel. Java,
FORTRAN, Basic, y ADA son slo algunos ejemplos de lenguajes de alto
nivel que son utilizados por los cientficos para expresar los
algoritmos que se han desarrollado. El acto de expresar un algoritmo
utilizando un lenguaje de bajo nivel o alto nivel se refiere a la
programacin.
A lo largo de los aos, a partir de la dcada de 1950, los cientficos
han creado muchos lenguajes de alto nivel. En los primeros das algunos
expertos pensaban que debera ser posible desarrollar un lenguaje que
sera mejor para todos usos. Desde entonces, sin embargo, los
cientficos han encontrado que el diseo de un lenguaje contiene siempre
algunas caractersticas y capacidades de los dems. Como resultado, hoy
tenemos muchos buenos lenguajes de alto nivel, algunos en particular
adecuado para la manipulacin de smbolos, algunos especialmente bueno
para la enseanza de la programacin, algunos para aplicaciones de
lgebra de matrices, algunos para un rpido desarrollo, programas onetime, algunos de misin crtica, aplicaciones vida-dependientes, algunos
atentos para aplicaciones de control automatizado en tiempo real, y
muchos buenos para fines de propsito-general. Los cientficos de la
computacin estudian las caractersticas generales de los lenguajes de
computadora y gramticas formales, y suele dominar varios o muchos
lenguajes diferentes.
El trmino software se utiliza para describir el conjunto de
instrucciones, o programas, que una computadora utiliza para ejecutar
un algoritmo. Software contiene las instrucciones que dirigen el
funcionamiento del hardware. El software que hace accesible las
funciones bsicas de la computadora
es llamado como el software del
sistema. El software del sistema es responsable de controlar y gestionar
el hardware de un sistema informtico, y para hacer fcil el uso de la
computadora para desarrolladores de programas, as como usuarios en
general. Ejemplos de software de sistema incluye sistemas operativos,

display managers, el buscador de virus, procesadores de lenguaje


(llamados
compiladores
o
intrpretes-que
se
debatirn
en
el
captulo sobre el software), y los controladores de dispositivo.
Programas tales como procesadores de texto o hojas de clculo se
denominan software de aplicacin. El software de aplicacin se usa para
realizar tareas especficas. El Software de aplicacin puede consistir
en un nico programa, o un pequeo coleccin de programas que trabajan
juntos para realizar una tarea para un usuario de la computadora.
Los sistemas operativos son especialmente importantes y software del
sistema complejo. Son importantes porque el rendimiento del sistema
operativo tiene una influencia notable en la calidad de la experiencia
del usuario y la eficiencia del sistema en su conjunto. En los das de
los sistemas de computacin ms simples, en el 1960 y 1970, una empresa
puede comprar un computadora sin un sistema operativo, con la intencin
de escribir o utilizar su propio sistema operativo, pero en la
actualidad uno compra siempre un sistema operativo cuando uno compra una
computadora.
El sistema operativo proporciona un fcil acceso a dispositivos
perifricos como impresoras y pantallas, un sistema de archivos para
almacenamiento de la informacin como datos, documentos y programas, una
interfaz de usuario para que sea ms fcil para iniciar la aplicacin
programas, un tiempo del da de reloj, una conexin a Internet a travs
de los protocolos de red estndar, una serie de "llamadas"
o "mtodos" programas de aplicacin que puede utilizar para solicitar
los
servicios
del
sistema
operativo,
un
algoritmo
eficiente
para la asignacin de memoria para los diversos programas activos al
mismo tiempo, y un algoritmo eficiente para el intercambio de
el acceso al computadora entre varias personas y / o programas al mismo
tiempo.
Popular hoy los sistemas operativos incluyen Microsoft Windows, Mac OS,
Unix, Linux (una variedad de Unix), y de IBM MVS, entre otros. De hecho,
el mbito de desarrollo del sistema operativo sigue siendo un muy activo
en una ciencias de la computacin. No slo son los sistemas operativos
cada vez ms complejo (la adicin de firewalls y otras protecciones,
por ejemplo), pero los sistemas operativos son tambin cada vez ms
diversa. Como los dispositivos ms simples como los termostatos y
lavavajillas bajo control de computadora, cientficos especializados han
creado "sistemas embebidos" sistemas operativos para esos requisitos.
Incluso en la dcada de 1980 muchos, si no la mayora, los computadoraes
eran
autnomos-no
estn
conectados
el
uno
al
otro.
Durante
los aos 1970 y 1980 cientficos explorar las ventajas de la informtica
y el proyecto de redes un nmero de diferentes conexiones fsicas entre
computadoras, as como los diferentes protocolos de red. En la
vez que se caliente la competencia entre diferentes proveedores de
equipos, cada uno con un diferente nivel, y cada con la esperanza de
"bloqueo en" clientes mediante la venta de sus productos de red
particular. IBM ofrece el sistema de redes Architecture (SNA), Digital
Equipment promovido DECnet, Hewlett Packard ofrece Sistemas Distribuidos
(DS), Xerox y Xerox ofrece sistemas de red (XNS). Incluso General Motors
tiene en el acto, con su Protocolo de Automatizacin de Manufactura
(MAP). Ninguno era directamente compatible con cualquier otro, pero
todos ofrecen "Puentes" a otros sistemas.
Hoy en da los problemas para los cientficos en la creacin de redes
son diferentes. En su mayor parte, el mundo ha acordado en el IEEE 801

normas y el protocolo TCP / IP protocolos para la Internet. Los


problemas que tienen ahora que ver con la ampliacin del nmero de
direcciones de Internet sin perturbar el funcionamiento de los mayores
"instalado base ", la adaptacin a las nuevas y mucho ms rpido de
conexiones fsicas, tales como fibra ptica, el aumento de la velocidad
de conexiones inalmbricas, que son por naturaleza ms lento y ms
susceptibles a interferencias, la gestin de mayor las transferencias de
datos, como pelculas, que tambin requieren un estricto rendimiento en
tiempo real por lo que la pelcula no se detiene midaction, y la
prestacin de baja potencia, de bajo costo protocolos para la conexin
ad hoc de cientos o miles de sensores digitales.
Apoyo a casi todas las aplicaciones de hoy es la tecnologa de base de
datos. La base de datos modelo dominante es el base de datos relacional,
en primer lugar ofrecido para uso comercial en la dcada de 1980.
Cientficos
para
desarrollar
algoritmos
almacenar
y
recuperar
informacin rpidamente de absolutamente enormes depsitos de datos.
Cmo es, por ejemplo, que Google puede llamar a casi instantneamente a
ms de 400.000 imgenes de un "granero rojo" de ms de 1,5 millones de
imgenes en su base de datos? Hay mucho que saber acerca de cmo crear
una buena base de datos, el acceso a una base de datos de un programa,
una creciente base de datos, y la gestin de una base de datos.
Aplicacin programadores y administradores de bases de datos necesidad
de comprender bases de datos a este nivel a fin de utilizar de manera
eficiente. Incluso cientficos se centraron en otras especialidades
necesita saber acerca de las bases de datos el da de hoy. Por ejemplo,
algunos de los ms recientes sistemas operativos de uso de la tecnologa
de base de datos en sus sistemas de archivos para el almacenamiento de
toda la informacin, no slo formalmente informacin dedicada a un
particular base de datos. Los beneficios para el sistema operativo
incluyen la velocidad, ahorro de espacio, y la seguridad de los datos.
En un nivel ms profundo, los cientficos desarrollar algoritmos para
compartir el acceso a una base de datos entre muchos usuarios
simultneamente. Por ejemplo, un sitio como Amazon.com pueden servir ms
de 100.000 usuarios a la vez, y es importante que cada uno de los
usuarios y las opciones de compras se mantendr distintos el uno del
otro. Asimismo, al hacer la reserva un asiento de avin on-line, es
importante que dos personas en lnea al mismo tiempo no se prometi en
el espacio mismo asiento! Cientficos tambin desarrollar algoritmos
para hacer copias de seguridad de la base de datos para proteger contra
la posibilidad de prdida de datos debido a la avera del equipo. Para
un sitio como Amazon, por ejemplo, un algoritmo debe permitir
copia de seguridad sin detener la operacin de la base de datos
primaria, para el sitio debe estar en todo momento! Algoritmos para
proporcionar dicho servicio fiable y eficiente es muy difcil de
perfeccionar.
No debera ser difcil de convencer de que las computadoras han cambiado
drsticamente la manera en que humanos seres viven sus vidas.
Tecnologas, como Internet y la World Wide Web poner una gran cantidad
de informacin de los dedos. Sistemas de mensajera instantnea, correo
electrnico, telfonos celulares y han revolucionado la forma en que los
seres humanos comunicarse. Equipo de sistemas de vigilancia estn siendo
utilizados por las fuerzas de polica a hacer del mundo un lugar ms
seguro para vivir.
Si bien todas estas tecnologas estn siendo utilizados principalmente
para el mejoramiento de la especie humana, tambin es posible
a utilizar estas tecnologas para infligir dao, obtener acceso no

autorizado a la informacin, o para espiar a la gente. Junto con la


capacidad para desarrollar estas tecnologas es una necesidad de hacer
frente a las consecuencias sociales y ticas de la utilizacin
tecnologa. Es igual de importante, a veces quiz incluso ms
importante, a hacer preguntas acerca de la potencial
impacto de una
tecnologa en la sociedad, como lo es para construir la tecnologa. A
medida que ms y ms personas llegan a depender en la tecnologa
informtica en su vida cotidiana, la informtica tambin debe considerar
el estudio de las cuestiones sociales de las tecnologas que produce.
No es una idea errnea de que la informtica no es ms que el estudio de
equipos de computacin y la programacin. Debe quedar claro para usted
ahora que la informtica es mucho ms que simplemente escribir
programas. Incluye el estudio de equipos de computacin, lenguajes de
computacin, sistemas operativos, redes, bases de datos, y las
consecuencias sociales de la informtica. Para ser eficaz, un equipo
cientfico debe comprender y dominar cada una de estas reas. Adems, la
informtica es una disciplina que an est en rpida evolucin
desde sus comienzos en la dcada de 1940. En la siguiente seccin vamos
a estudiar brevemente la historia de la computacin de ambos un hardware
y software perspectiva.
HISTORIA DE INFORMTICA
Aunque la informtica es un campo relativamente joven, que slo comenz
en serio en la dcada de 1940, el inters por la informtica y los
dispositivos informticos se inici mucho antes. El baco, un simple
cuento inventado dispositivo en Babilonia en el siglo IV aC, es
considerado por muchos como el primer dispositivo de computacin.
En 1614 el seor escocs John Napier, inventor de los logaritmos,
invent
un
dispositivo
consistente
en
el
clculo
de
una serie de barras (a menudo llamadas "huesos") que redujo el complejo
proceso de la multiplicacin y la divisin en el relativamente simples
tareas de suma y resta. Algunos consideran sus invenciones como el
primer intento de mecnica clculo.
Blaise Pascal a menudo se acreditan con la invencin de la primera
calculadora mecnica, la Pascaline, en 1642 (hay pruebas de que Leonardo
DaVinci puede haber golpeado Pascal por 150 aos). Segn las memorias de
Pascal, desarroll la mquina para ayudar a su padre con su trabajo como
recaudador de impuestos. Pascal del dispositivo slo puede aadir
y restar, pero es posible llevar a cabo la multiplicacin y la divisin
de operaciones a travs de una serie de adiciones o sustracciones. Qu
es digno de mencin acerca de la mquina de Pascal es que es capaz de
calcular con ocho cifras, y resta que se realiz utilizando tcnicas de
complemento. Restando el uso complementario Adems es la misma tcnica
que se utiliza para aplicar la resta en la mayora de computadoraes
modernos.

La Figura 1-1 Pascaline, fotografa de Yves Serra (http://pagespersoorange.fr/yves.serra/).

A comienzos de los aos 1800 fueron los inventores acaba de empezar a


construir
la
maquinaria
elctrica
que
alimentan
la
revolucin
industrial. Uno de estos inventores, Joseph Marie Jacquard, invent un
telar que en 1801 revolucion el tejido de la industria. Aunque no fue
el primer telar mecnico, el telar de Jacquard fue revolucionario en el
que ste podra ser utilizado para tejer complejas e intrincadas pautas
automticamente.
La idea clave detrs del telar es que el patrn que se teje la tela fue
codificado por agujeros en una tarjeta. Un grupo de estas tarjetas, que
literalmente se conectan, siempre y cuando la informacin necesaria para

Figura 1-2 El Telar Jacquard, fotografa de Frank


(http://www.columbia.edu/acis/history/jacquard.html).

da

Cruz

controlar las acciones del telar. El telar de Jacquard requiere menos


gente y poca habilidad para operar, y versiones of the Loom se
encuentran todava en uso hoy en da. El telar de Jacquard tambin tuvo
un profundo impacto en la informtica en el sentido de que
fue el uno de los primeros dispositivos que pueden ser programados. El
telar dio a luz el concepto de tarjetas perforadas, que desempe un
papel
fundamental
en
los
primeros
das
de
la
informtica.
Charles Babbage, un matemtico e inventor, creci cansado de clculo de
las tablas astronmicas a mano, y concebido de una manera de construir
un dispositivo mecnico para realizar los clculos automticamente. En
1822 Babbage comenz a trabajar en un dispositivo de computacin, la
diferencia de motor, para calcular automticamente matemticas
tablas. En el curso de su trabajo sobre la diferencia de motor, concibi
ms de un sofisticado mquina en la que el llamado motor de anlisis. El
motor analtico que ha de ser programado mediante puetazos
tarjetas,
y
se
emplean
elementos
como
el
control
secuencial,
ramificacin, y la reproduccin en bucle. Aunque Babbage nunca se

construy un modelo de trabajo completa, ya sea de mquina, su trabajo


se
convirti
en
la
base
sobre
la
que
muchos
modernos
se construyen las computadoras. (Uno de Babbage diferencia de la
anterior
motores
fue
construido
a
partir
de
dibujos
por un equipo en Londres del Museo de la Ciencia en el decenio de 1990.
La
mquina
pesa
3
toneladas
y
es
de
10
pies
de
ancho
por 6 1 / 2 pies de altura).

Figura 1-3 Tarjetas de Telar Jacquard, fotografa de Doug


(http://www.cs.uiowa.edu/ ~ jones / tarjetas / history.html).

Jones

En su trabajo analtico sobre el motor, Babbage hecho un importante


salto intelectual en relacin con la puetazos tarjetas. En el telar de
Jacquard, la presencia o ausencia de cada agujero en la tarjeta de
fsica permite un hilo de color a pasar o que el hilo se detiene.
Babbage se dio cuenta de que el patrn de los agujeros poda ser
utilizado para representar un resumen idea como un problema de
declaracin o los datos necesarios para que la solucin del problema.
Debido a la conexin con el telar de Jacquard, Babbage llam a los dos
principales partes de su motor analtico la "tienda" y "Mill", ya que
ambos trminos se utilizan en el tejido de la industria. La tienda fue
cuando los nmeros se celebr, y la fbrica donde fueron "tejidos" en
los nuevos resultados. En un computadora moderno esas mismas partes son
llama la unidad de memoria y la unidad central de procesamiento (CPU).
Tal vez el concepto clave que separa el motor de anlisis de sus
predecesores es que el apoyo condicional de la ejecucin del programa.
Esto permite a la mquina para determinar qu hacer a continuacin,
sobre la base de una condicin o situacin que se detecta en el momento
en que el programa se est ejecutando.
Augusta Ada Byron, la condesa de Lovelace, fue un matemtico que trabaj
con Charles Babbage en su motor analtico. A diferencia de Babbage,

quien estaba interesado en la construccin de un dispositivo de


computacin, trata de Lovelace entender y de la razn acerca de los
mtodos de clculo. Estudi estos mtodos, sus implementaciones, y la
propiedades de sus implementaciones. Lovelace desarrollado incluso un
programa que habra sido capaz de calcular los nmeros de Bernoulli.
(Los nmeros de Bernoulli comprenden una secuencia de nmeros racionales
que tienen muchas funciones en la las matemticas y la teora de los
nmeros.)
En su anlisis publicado de la contabilidad analtica de motor, de
Lovelace esboz los fundamentos de la computadora programacin,
incluyendo la reproduccin en bucle y hacer frente a la memoria. La
influencia del telar de Jacquard en su trabajo se evidente en su
escrito, "Se puede decir ms bien que el motor de anlisis algebraico
patrones de tejidos al igual que la Telar de Jacquard teje flores y
hojas ".
Es por esta labor que muchos consideran Lovelace a ser el primer
programador.
Los EE.UU. Departamento de Defensa llamado el lenguaje ADA en honor de
la labor de la Lovelace como una programador.

Figura
1-4
Ada
Lovelace
(http://www-groups.dcs.st-and.ac.uk/
historia / PictDisplay / Lovelace.html).

El censo de 1890 de los Estados Unidos result otro hito en la historia


de la computacin cuando ponche.
Se utilizaron tarjetas automtica con la clasificacin y tabulacin
equipo
inventado
por
Herman
Hollerith
a
la
velocidad
recopilacin de los datos. Su mquinas redujo el tiempo necesario para
una completa compilacin de los resultados de los censos de
10 aos para 3 meses, y guardado $ 5000000 en costos para la Oficina del
Censo.
Basndose en el xito de su equipo con los EE.UU. Oficina del Censo,
Hollerith fund la tabulacin Mquina Company en 1896. Despus de la
fusin con otras dos empresas y el cambio de su nombre, la empresa
que se conoce como International Business Machines (IBM) Corp La
tarjetas perforadas sigue siendo un alimento bsico de datos
almacenamiento hasta bien entrado el siglo 20.

Figure 1-5 Hollerrith Tabulator & Sorter, photograph IBM Corporate Archives

La dcada de 1940 fueron una dcada de acontecimientos dramticos para


el mundo. La Segunda Guerra Mundial cambi la faz del mundo y
muchas vidas para siempre. Aunque fueron terribles atrocidades que
tienen lugar durante este periodo, tambin fue un momento de la
innovacin
y la invencin de la informtica. Durante la dcada de 1940 los primeros
computadoraes electrnicos se han construido, principalmente para apoyar
la guerra.
Lamentablemente las nubes de la guerra hace que sea difcil determinar
exactamente quin invent el computadora.
Legalmente, al menos en los Estados Unidos, John Atanasoff se acredita
como el inventor de la computadora.
Atanasoff fue un profesor de matemticas y fsica en el Estado de Iowa.
Atanasoff fue frustrado por la dificultad sus estudiantes graduados

estn teniendo la bsqueda de soluciones a los grandes sistemas de


ecuaciones algebraicas simultneas para la solucin de ecuaciones
diferenciales. Al igual que Babbage, casi 100 aos antes, Atanasoff
crea que podra construir una mquina para resolver estas ecuaciones.
Trabajo con estudiante graduado Clifford Berry, Atanasoff completado un
prototipo de su mquina cerca del final de 1939. Atanasoff Berry y busc
la sencillez en su equipo. La Atanasoff-Berry

Figure 1-6 Clifford Berry with the ABC (www.scl.ameslab.gov/ABC/Progress.html).

Computadora (ABC) utiliza slo 300 tubos de vaco y fue capaz de


realizar aritmtica electrnicamente.
Tal vez lo que es ms importante sobre este particular es que la mquina
funcione con base-2 nmeros (binario). El ABC no aplicar la idea del
programa almacenado, sin embargo, por lo que no es un propsito general
computadora. Durante el mismo perodo de tiempo, Howard Aiken estaba
trabajando en la computadora Mark I en la Universidad de Harvard.
Como se concluy en 1944, el Mark I contena ms de 750.000 piezas,
incluyendo conmutadores, rels, rotacin de ejes, y embragues. La
mquina fue enorme, a los 51 pies de largo, 8 pies de alto, 2 pies de
grosor, y con un peso de 5 toneladas. Tuvo 500 kilmetros de cableado, y
tres millones de conexiones de cable. La mquina sonaba como un "aula de
seoras tejiendo" cuando se ejecuta. Aiken demostr que era posible
construir un gran equipo automtico capaz de fiable ejecucin de un
programa.

Figure 1-7 The Aiden/IBM Mark 1 Computer installed at Harvard, photograph IBM Corporate Archives.

Una de las personas que han trabajado con Aiken en la Mark I era de
Grace Murray Hopper, un recin encargado teniente en los EE.UU. la
Reserva Naval. Hopper ha participado con la programacin de la Mark I
desde el principio. Uno de sus ms importantes contribuciones al campo
de la computacin fue el concepto de un compilador. Hopper fue
preocupado por el error-plagado naturaleza del cdigo escrito, y ha
desarrollado una pieza de software que se traducira un conjunto de
instrucciones del programador, escrita en un alto nivel de lenguaje
simblico, en la mquina del lenguaje. El primer compilador desarrollado
por Hopper fue nombrado A-0, y fue escrito en 1952. Gracia Murray Hopper
es tambin acreditado como la persona que acu el trmino "bug".
Durante el verano de 1947, la computadora Mark II, su sucesor en el Mark
I, estaba actuando extraamente. A veces se producen la correcta
respuesta, y otras veces el mismo programa que producir resultados
errneos. Hopper localizar el problema a un rel defectuoso en el
equipo. Cuando se examin fsicamente el rel para corregir el problema,
ella descubri que una polilla haba sido atrapado en el rel, causando
fallos en el funcionamiento. Una vez eliminado la polilla del rel, la
mquina funcion con normalidad. El "error" fue grabado en una pgina
del bloc de notas de laboratorio con la inscripcin "En primer lugar
real de error encontrado."

Figura
1-8
El
primer
equipo
de
error
(http://www.history.navy.mil/photos/images/h96000/h96566kc.htm).
Despus de la Segunda Guerra Mundial termin, los aliados descubrieron
que Konard Zuse, un ingeniero alemn, ha sido el desarrollo de
computadoras para su uso por los alemanes. Zuse del primer equipo, el
Z1, fue construido entre 1936 y 1938. El mquina que figuran todas las
partes de un computadora moderno, sin embargo, no era fiable. Su
construccin mecnica es muy complejo y propenso a errores. Zuse la Z3
fue
el
primer
programa
completamente
funcional
controlada
por
computadora en el mundo.
El Z3 se termin en 1941 y antes de Aiken Mark I. Zuse 's logros son an
ms increble dado el material y la escasez de trabajadores en Alemania
durante la Segunda Guerra Mundial. Zuse ni siquiera pudo obtener la
cinta de papel, por lo que tuvo que hacer su propia perforacin de
agujeros en la pelcula de cine descartado. Zuse tambin invent lo que
podra ser el primero de alto nivel de lenguaje de computadora,
"Plankalkul", aunque, tambin, era desconocido fuera de Alemania.
La labor realizada por el cdigo de breakers en Bletchley Park (entre
Londres y Birmingham, UK) durante la Segunda Guerra Mundial los aliados
siempre con la informacin que result, literalmente, la marea de la
guerra. Computadoraes desempeado un papel fundamental en la labor de
los breakers y cdigo hecho posible para ellos para romper el Enigma
Lorenz
y
los
algoritmos
de
cifrado.
Colossus,
un
computadora
desarrollado en Bletchley Park para romper sistemas de cifrado, empez a
funcionar
en
1943.
Colossus
fue
uno
de
los
primeros
grandes
computadoraes de emplear tubos de vaco, y fue capaz de leer
la informacin almacenada en cinta de papel a una tasa de 5000
caracteres
por
segundo.
Colossus
tambin
figura
limitada
programabilidad.
Cuando los aliados invadieron el norte de frica en 1942, descubrieron

que los disparos los cuadros que utiliza para su objetivo


artillera se fuera. Esto dio lugar a solicitudes de nuevos cuadros de
balstica
que
super
la
capacidad
de
calcular
ellos.
John Mauchly y J. Presper Eckert utilizado esta oportunidad para
proponer el desarrollo de una electrnica de alta velocidad
tubo de vaco computadora. Aunque muchos expertos predijeron que, dado
el nmero de tubos de vaco en la mquina, slo una duracin de cinco
minutos sin parar, eran capaces de obtener la financiacin para
construir la mquina.
Bajo un manto de secreto, que comenz a trabajar en la mquina en la
primavera de 1943. Se termin su labor en la mquina en 1946. El
resultado fue el Integrador Numrico Electrnico y el Analizador de
Computadora (ENIAC), una mquina que pesaba 30 toneladas y fue
construido utilizando tubos de vaco, 17468 y 6000 interruptores. La
mquina fue ms de 1000 veces ms rpido que cualquier mquina
construida
hasta
la
fecha.
A
diferencia
de
modernas
computadoras, la reprogramacin ENIAC requiere un cableado de los
circuitos bsicos en la mquina. ENIAC anunciado los albores de la
computadora de edad.
Poco despus de ser funcional ENIAC, Eckert y Mauchly form la
Electronic Control Corporation (ECC) y ha recibido contratos del
gobierno para disear y construir un equipo para la Oficina del Censo.
ECC desarrollados y las dificultades financieras como consecuencia
vendi sus patentes, y se convirti en un empleado de la
Remington Rand Corporation. En 1951, Remington Rand entreg el Universal
automticos (UNIVAC) a la Oficina del Censo.
UNIVAC fue el equipo ms rpido de la poca y era el nico disponible
comercialmente para fines generales computadora. Slo contena 5.000
tubos de vaco y es ms compacto que sus predecesores. UNIVAC
las computadoras fueron vendidas a agencias de gobierno, el AC Neilson
Company (investigadores de mercado) Prudencial y Seguro. En 1957
Remington Rand ha vendido ms de 40 mquinas.
Probablemente lo que hizo ms famosa UNIVAC fue su utilizacin por CBS
para
predecir
los
resultados
de
las
presidenciales
de
1952
eleccin. Las encuestas de opinin predecan que Adalai Stevenson que
golpearon a Dwight D. Eisenhower por un deslizamiento de tierras.
UNIVAC, el anlisis de los primeros retornos, sin embargo, mostr una
clara victoria de Eisenhower. Walter periodistas Cronkite y Charles
Collingwood en tela de juicio la validez de las previsiones del equipo,
por lo que aplaz UNIVAC anunciar la prediccin hasta muy tarde.
Durante muchos aos, Eckert y Mauchly fueron considerados los inventores
de la computadora electrnica. De hecho, solicitada, y recibi, una
patente por su trabajo en 1947. Despus de la compra de ECC, Remington
Rand propiedad de la a sus derechos de patente y la recogida de regalas
de empresas de la construccin de computadoras. En una batalla legal,
iniciada por Honeywell de la negativa a pagar las regalas, un juez
dictamin la patente original no vlidos. Parte de su decisin de
invalidar la patente se basaba en el hecho de que Mauchly visit John
Atanasoff del laboratorio en 1941, y se utiliza la que el conocimiento
adquirido durante la visita a construir ENIAC. Los resultados de esta
demanda que establece la ley John Atanasoff como el inventor de las
computadoras modernas.
Despus de la guerra, el desarrollo comercial de las computadoras
continuacin, lo que resulta en el desarrollo de muchos nuevos
mquinas que proporcionan un mejor rendimiento en trminos de capacidad
de computacin y la velocidad. Computadoraes en este tiempo fueron

grandes, engorrosos dispositivos que son capaces de realizar operaciones


simples. Estas mquinas se muy costoso construir y mantener. Las nicas
organizaciones que pueden permitirse el lujo de compra y ejecutar la
equipo de gobierno y grandes corporaciones.
No es de extraar que muchas personas que trabajan en el mundo de la
informtica consider que el uso de las computadoras se limitado. En
1950 un artculo, tom nota de Business Week, "Los vendedores se
encuentra el mercado limitado. La UNIVAC no es el tipo de mquina que
cada oficina puede utilizar. "Y aunque la historia es probablemente
apcrifa, la tradicin de la informtica los siguientes atributos de
prediccin a Thomas Watson, el fundador de IBM, en 1943: "Creo que hay
un mundo mercado para quizs cinco computadoraes ".
A comienzos del decenio de 1950, un grupo de cientficos que trabajan en
los Laboratorios Bell en Nueva Jersey est estudiando el comportamiento
de los cristales semiconductores como en un intento de sustituir los
tubos de vaco. Su labor dio lugar a la del desarrollo del transistor,
que cambi la manera en que muchas computadoras y dispositivos
electrnicos se han construido.
Cambiar los transistores y modular la corriente elctrica en gran parte
de la misma manera que un tubo de vaco. El uso de transistores
en lugar de tubos de vaco en las computadoras dio lugar a mquinas que
eran mucho ms pequeos y ms baratos, y que requiere considerablemente
menos electricidad para funcionar. El transistor es uno de los ms
importantes invenciones en el Siglo 20.
Si bien la computadora empresas como IBM y Honeywell se centr en el
desarrollo de mainframe computadoras, Digital Equipment Corporation
(DEC) se centr en el desarrollo de computadoraes ms pequeos. De la
DEC PDP serie de los computadoraes eran pequeos y diseados para servir
a las necesidades informticas de los laboratorios. El PDP-8 se
uno de los primeros computadoraes comprados por los usuarios finales.
Debido a su bajo costo y portabilidad, estas mquinas pueden ser
adquiridos para cubrir una necesidad especfica. El PDP-8 se considera
generalmente como la primera minicomputadora.
La invencin del circuito integrado causado la tendencia hacia la menor,
ms barato y ms rpido a computadoras acelerar. Electrnica Popular
present un artculo sobre un kit de casa que podra comprar los
aficionados que les permitan construir un computadora en casa. Esta
mquina, que se ofrecen en primer lugar en 1974, fue el Altair 8800,
fabricado por una empresa llamada Mits. Se inici en el computadora
personal era. Estas primeras mquinas fueron diseadas a ser construido
en casa, que estaba bien para el hogar aficionado, pero se limita la
disponibilidad de la mquina. La primera lenguaje de programacin para
la Altair se Altair BASIC, el primer producto de una pequea empresa
llamada Microsoft.
En 1981 IBM present su computadora personal, o PC, que cambi la faz de
la informtica para siempre.
Es ahora posible para que las personas simplemente comprar estas
mquinas y el uso en el hogar.
Plan de trabajo
Despus de leer este captulo, usted debe darse cuenta de que hay mucho
ms a la informtica que simplemente escribir programas. Como cualquier
profesional, un equipo cientfico debe tener una comprensin de todas
las Especialidades del campo. Algunas de las principales disciplinas de
ciencias de la computacin son los algoritmos, la programacin, la

programacin idiomas, informtica hardware, redes, sistemas operativos,


sistemas de bases de datos, computacin distribuida, y los aspectos
ticos que rodean el uso de la tecnologa de la computacin.
Hay dos grandes escuelas de pensamiento en lo que se refiere a la
educacin de los cientficos. El primer fondo enfoque es el estudio de
un tema en particular en profundidad. Por ejemplo, muchos programas de
licenciatura de ciencias de inicio a cabo con un curso en la
programacin. Despus de tomar ese curso, los estudiantes se dominan los
programadores, pero claramente que no tiene suficiente conocimiento de
las otras Especialidades de la materia que se considera equipo
cientficos.
Un segundo enfoque es el de cubrir muchas de las Especialidades de
Ciencias de la Computacin, pero slo en la profundidad necesaria para
ensear una comprensin bsica de los principios de cada disciplina.
Despus de obtener una visin global de el campo, los estudiantes
entonces ciertas Especialidades estudio en profundidad. Esto se conoce
como la amplitud primer enfoque, y es el enfoque que elegimos para
utilizar en este libro.
La organizacin de este texto sigue la descripcin de la computacin en
la primera seccin de este captulo. Comienza con un anlisis de
algoritmos, la forma en que se desarrollan, y cmo se pueden comparar.
Tambin introducir un modelo formal de la computacin. Despus de leer
este captulo, usted tendr una comprensin bsica de algoritmo de
desarrollo y ser capaz de desarrollar algoritmos para resolver
problemas simples. Despus de estudiar los algoritmos, el texto se
centrar en los elementos bsicos de hardware. En este captulo se
aprender lo que los principales componentes de la computadora son y cmo
funcionan juntos. Usted tambin aprender acerca de la sistema numrico
binario y ver cmo se puede utilizar para codificar la informacin a
nivel hardware. Los dos captulos siguientes se centrar en la
programacin. En primer lugar, se estudio el software en general y
discutir cmo de alto nivel de idiomas puede ser construido para
proporcionar modelos de algoritmos en los que puede expresarse, y
en ltima instancia, expres en una forma de que el hardware puede
trabajar con. En el prximo captulo nos centraremos en la programacin
utilizando el lenguaje de programacin Java. El objetivo de este
captulo no es para hacerte un experto programador, pero en lugar de
introducir a los fundamentos de programacin utilizando un lenguaje que
es fcilmente disponible y en amplio uso. Despus de aprender los
fundamentos de la programacin que se centrar en los sistemas
operativos, redes y bases de datos. Los temas tratados en estos
captulos se abordarn comn de las tcnicas utilizadas para gestionar
equipo hardware, facilitar el acceso a los recursos de la red, y
gestionar y almacenar datos. Casi todas las computadoras modernas
aplicacin utiliza las tecnologas examinadas en estos captulos.
El ltimo captulo en el libro discutir algunas de las cuestiones
sociales de la informtica. En este captulo discutirn los derechos de
propiedad intelectual y los conflictos, la privacidad de los datos,
"piratera", y los virus. Tambin discutir nuestras responsabilidades
profesionales en vidas dependen de los sistemas en los que trabajamos.
REPASO DE PREGUNTAS
1.1 Escribir un algoritmo para su rutina por la maana, desde el momento

en
que
el
despertador
suena
casa para el trabajo o la escuela.

hasta

que

salga

de

la

1.2 Buscar o inventar un algoritmo para calcular la raz cuadrada de


cualquier nmero. Aplicar el algoritmo para la nmero 2046, la bsqueda
de su raz cuadrada a 2 decimales. No usar una computadora o
calculadora!
1.3 Perl es un lenguaje de computadora que se utiliza a menudo para un
rpido, una vez puestos de trabajo de programacin, al igual que la
conversin de texto en un documento de un formato a otro. ADA es un
lenguaje utilizado para el Departamento de Defensa aplicaciones en las
que la vida humana puede estar en juego. Qu diferencias te imaginas a
encontrar cuando Perl comparar con ADA?
1.4 Por qu puede un cientfico de la computacin con un inters
primordial en las bases de datos tambin debe saber sobre la creacin de
redes?
1.5 La sigla API est a favor de Interfaz
aplicaciones.
Qu
es
lo
que
supongo
API
respecto a un sistema operativo?

de programacin de
con
los
medios

1.6 Si se ofrece un puesto de trabajo con Microsoft y permite elegir


entre trabajar en sistemas operativos, base de datos de productos,
productos o aplicaciones como Word o Excel, lo que usted elige, y por
qu?
1.7 A quin cree usted que debe ser acreditado como "el inventor de las
computadoras modernas?"
1.8 Qu aplicaciones de la informtica parecen a usted inmorales a ser?
Cules son algunos de los principios que usted puede declarar
con respecto a las consecuencias ticas y no ticas uso de las
computadoras y el software?
1.9 Lista de algunas importantes formas en que la informtica ha
contribuido al bienestar de la humanidad. Que las personas,
si los hubiere, han sufrido el avance de la tecnologa informtica?

Capitulo 2

ALGORITMOS

Definicin de un algoritmo
Un algoritmo es un mtodo para resolver una clase de problemas. Si bien
la computadora cientficos piensan mucho acerca de algoritmos, el
trmino se aplica a cualquier mtodo de resolver un determinado tipo de
problema. La reparacin manual de su automvil se describe un
procedimiento, que tambin podra ser llamado un algoritmo, para la
sustitucin de las zapatas del freno. El paso a paso de viaje
instrucciones de MapQuest que podra llamarse un algoritmo para llegar
de un lugar a otro.
Ejemplo-el diseo de una escalera
Usted puede ser sorprendido, como lo fuimos nosotros, saber que cada
escalera debe ser diseado para adaptarse a las circunstancias
de elevacin total (total de "lugar") y el total de medida horizontal

(total
"Ejecutar").
Figura
2-1
muestra
estas
dimensiones.
Si usted busca la web, usted puede encontrar mtodos de algoritmos para
el diseo de escaleras.
Para hacer encajar las escaleras de una persona natural de andar, la
relacin de cada uno de los pasos del lugar (altura de elevacin) y su
plazo (horizontal distancia) deben ser coherentes con una frmula.
Algunos dicen que la siguiente frmula debe ser satisfecho:
(* lugar 2) + run = de 25 a 27 pulgadas
Otros dicen que la siguiente frmula ms sencilla funciona bien:
lugar run = + 17 a 18 pulgadas
Muchos dicen que el lugar ideal para cada paso es de 7, pero algunos
dicen que las medidas al aire libre debe ser 6 en alto porque la gente
es ms probable que se transporten cargas pesadas fuera. En cualquier
caso, para cualquier situacin particular, el aumento total de
la escalera probablemente no ser un mltiplo de 6 o 7 pulgadas Por lo
tanto,
el
aumento
de
cada
paso
debe
ser
alterado
para
crear
toda
una
serie
de
medidas.
Estas normas conducen a un procedimiento para el diseo de una escalera.
Nuestro algoritmo para el diseo de un conjunto de escaleras sern los
siguientes:
1 Divida el total por el lugar 7 en ronda y el resultado al nmero
entero
ms
cercano
para
obtener
el
nmero
de
pasos.
2 A continuacin, dividir el total por ejecutar (el nmero de pasos - 1)
(ver
Fig.
2-1)
para
calcular
la
duracin
de
cada
paso.
3 Vamos a aplicar una de las frmulas para ver cmo cerrar este par de
lugar
y
ejecutar
los
parmetros
es
el
ideal.
4 A continuacin, vamos a completar el mismo los clculos con un paso
ms
y
menos
un
paso,
y
tambin
calcular
el
valores de la frmula de las combinaciones de lugar y plazo.
5 Vamos a aceptar la combinacin de lugar y ejecutar que mejor se adapte
a
la
frmula
para
el
ideal.
Un algoritmo es una forma de resolver un tipo de problema, y un
algoritmo
es
aplicable
a
muchos
particular
de los casos el problema. Un buen algoritmo es una herramienta que puede
ser utilizado una y otra vez, como es el caso de nuestro
algoritmo de diseo de escalera.

Figure 2-1 Staircase dimensions.

Ejemplo-encontrar
el
mximo
comn
denominador
En matemticas, un exitoso y famoso algoritmo til es el algoritmo de
Euclides
para
encontrar
el
mayor
comn divisor (GCD) de dos nmeros. El GCD es el mayor entero que se
dividen
por
igual
los
dos
nmeros
en cuestin. Euclides describe su algoritmo de alrededor de 300 AEC.
Sin tener el algoritmo de Euclides, cmo encontrar una la GCD de 372 y
84?
Uno
tendra
que
factor
los dos nmeros, y encontrar el mayor factor comn. Como los nmeros en
cuestin
convertido
en
ms
y
ms
grandes,

el factoring tarea se vuelve ms y ms difcil y lleva mucho tiempo.


Euclides
descubri
un
algoritmo
que
sistemtica y rpidamente reduce el tamao del problema mediante la
sustitucin
de
la
original
par
de
nmeros
ms
pequeos
pares hasta que uno de la pareja se convierte en cero, momento en el que
la
GCD
es
el
otro
nmero
de
la
pareja
(la
GCD
de
cualquier
nmero
es
0
y
ese
nmero).
Aqu est el algoritmo de Euclides para encontrar el GCD de los dos
nmeros
A
y
B.
Repetir:
Si B es cero, la GCD es A.
En caso contrario:
encontrar el resto al dividir R A por B
sustituir el valor de A con el valor de B
sustituir el valor de B con el valor de R
Por ejemplo, para encontrar la GCD de 372 y 84, que vamos a mostrar
como:
GCD (372, 84)
Buscar GCD (84, 36) porque 372/84 -> resto 36
Buscar GCD (36, 12) porque 84/36 -> resto 12
Buscar GCD (12, 0) porque 36/12 -> resto 0; Solucionado! GCD = 12
Ms formalmente, un algoritmo es una secuencia de cmputos que opera en
algunos de los insumos y produce un resultado en un perodo finito de
tiempo. En el ejemplo del algoritmo para el diseo de escaleras, las
entradas son el aumento total y de ejecucin total. El resultado es la
mejor especificacin para el nmero de pasos, y para el lugar y plazo de
cada paso.
En el ejemplo de la bsqueda de la GCD de dos nmeros, los insumos son
los dos nmeros, y el resultado es la GCD.
A menudo hay varias formas de resolver una clase de problemas, varios
algoritmos que hacer el trabajo. El la pregunta es, entonces, que es el
mejor algoritmo? En el caso de los algoritmos de clculo, los
cientficos
han
computadora
desarrollado tcnicas para el anlisis de los resultados y juzgar la
calidad
relativa
de
los
diferentes
algoritmos.
En
representacin
de
los
algoritmos
con
pseudocdigo
En informtica, los algoritmos son generalmente representados como
pseudocdigo.
Pseudocdigo
est
lo
suficientemente
cerca
para
un verdadero lenguaje de programacin que pueden representar las tareas
que el equipo debe realizar en la ejecucin del algoritmo.
Pseudocdigo tambin es independiente de cualquier idioma, martimas y
por
los
detalles
de
la
sintaxis,
que
caractersticas lo hacen especialmente atractivo para la transmisin a
los seres humanos esenciales de las operaciones de un algoritmo.
No hay forma estndar pseudocdigo, y muchos cientficos computacionales
de
desarrollar
un
estilo
personal
de
pseudocdigo
que se adapte a ellos y sus tareas. Nosotros usaremos el siguiente
pseudocdigo estilo para representar a la GCD algoritmo:

Caracterizacin
de
ALGORITMOS
Para ilustrar cmo los diferentes algoritmos pueden tener diferentes
caractersticas
de
rendimiento,
vamos
a
discutir
una
variedad de algoritmos de computadora que los cientficos han desarrollado para
resolver
problemas
comunes
en
la
informtica.
Secuencial
de
bsqueda
Supongamos que uno es contar con una lista de las personas en la clase, y es
una
pregunta
para
buscar
el
nombre
Debbie
Drawe. Una bsqueda secuencial es una "fuerza bruta" un algoritmo que puede
utilizar.
Con
una
bsqueda
secuencial,
la
simplemente algoritmo compara cada uno de los nombres en la lista con el nombre
de
la
que
estamos
buscando.
La
bsqueda
termina
cuando
el algoritmo encuentra un nombre correspondiente, o cuando el algoritmo ha
inspeccionado
todos
los
nombres
en
la
lista.
Aqu est pseudocdigo para la bsqueda secuencial. La doble barra "/ /" indica
un
comentario.
Tenga
en
cuenta,
tambin, la manera en que usamos la variable ndice para referirse a un
elemento
particular
en
list_of_names.
Por
ejemplo,
list_of_names [3] es el tercer nombre en la lista.

ANLISIS DE ALGORITMOS
Si sabemos cunto tiempo toma cada declaracin a ejecutar, y sabemos
cmo
son
muchos
los
nombres
en
la
lista,
que
puede calcular el tiempo necesario para el algoritmo a ejecutar. Sin
embargo,
lo
importante
a
saber
sobre
un
algoritmo usualmente no es cunto tiempo tomar para resolver cualquier
problema
en
particular.
Lo
importante
a
saber
es
la forma en que el tiempo necesario para resolver el problema varan
segn
el
tamao
del
problema
de
los
cambios.
El algoritmo de bsqueda secuencial llevar ms tiempo ya que el nmero
de
comparaciones
se
convierte
en
mayor.
El
real
trabajo del algoritmo es en comparar a cada nombre el nombre de la
bsqueda. La mayora de los otros estados en el algoritmo de obtener
ejecutado slo una vez, pero siempre y cuando la condicin, mientras que
sigue siendo cierto, las comparaciones se producen una y otra vez.
Si el nombre que estamos buscando est en la lista, en promedio, el
algoritmo
tendr
que
buscar
en
la
mitad
de
los
nombres
en la lista antes de encontrar un partido. Si el nombre que est
buscando
no
est
en
la
lista,
el
algoritmo
tendr
que
ver
todos
los
nombres
en
la
lista.
Si la lista es el doble de largo, aproximadamente el doble de las
comparaciones ser necesario. Si la lista es de un milln de
veces ms largo, aproximadamente un milln de veces ms comparaciones
ser
necesario.
En
ese
caso,
el
tiempo
dedicado
a las declaraciones ejecutado slo una vez se convertirn en
insignificantes con respecto al plazo de ejecucin global. El
tiempo de ejecucin de la algoritmo de bsqueda secuencial crece en
proporcin
al
tamao
de
la
lista
registrada.
Nosotros decimos que la "orden de crecimiento" del algoritmo de bsqueda
secuencial
es
n.
La
notacin
de
esto
es
T
(n).
Nosotros
tambin decir que un algoritmo cuyo orden de crecimiento es constante en
algunos de los factores T (n), tiene una NL theta de decir.
"La bsqueda secuencial tiene una theta de n." El tamao del problema es
n,
la
longitud
de
la
lista
registrada.
Desde
que
para los grandes problemas que el tiempo-una-slo una-o-pocas veces-slo
hacer
declaraciones
poca
diferencia,
que
ignorar
los
constante o casi constante de los tiempos y simplemente centrarse en el
hecho
de
que
el
tiempo
crecer
en
proporcin
a
la
longitud
de
la
lista
registrada.
Por supuesto, para cualquier bsqueda, el tiempo necesario depender de
que
en
la
lista
del
partido
se
produce.
Si el primer nombre es una coincidencia, entonces no importa cunto
tiempo es la lista. Si el nombre no se da en la lista, la
buscar siempre la comparacin de exigir el nombre de la bsqueda con
todos
los
nombres
en
la
lista.
Nos dicen que el algoritmo de bsqueda secuencial es (n) porque en el
caso
promedio,
y
el
peor
de
los
casos,
su
desempeo
desacelera en proporcin al n, la longitud de la lista. A veces los
algoritmos se caracterizan por la mejor ejecucin del caso,
pero generalmente el rendimiento promedio y, en particular, el peor de
los casos se inform de la ejecucin. El promedio es generalmente el
caso
para el establecimiento de mejores expectativas, y el peor de los casos
prev un lmite en la que uno puede confiar.

Tipo de insercin-Un ejemplo de orden de crecimiento n2-Q (n2)


Los programadores han diseado muchos algoritmos para ordenar nmeros,
porque
se
necesita
esta
funcionalidad
con frecuencia. Un algoritmo de clasificacin se llama el tipo de
insercin, y funciona de manera similar a una tarjeta de jugador
la organizacin de su mano. Cada vez que el algoritmo lee un nmero (de
tarjeta),
que
coloca
el
nmero
en
su
posicin
ordenada
entre
los
nmeros
(tarjetas)
que
ya
ha
ordenado.
En la pgina siguiente se muestra el pseudocdigo para el tipo de
insercin.
En
este
caso,
usamos
dos
variables,
number_index y sorted_index, para realizar un seguimiento de dos
posiciones
en
la
lista
de
nmeros.
Consideramos que la lista como dos series de nmeros. Empezamos con un
slo
conjunto
de
nmeros-los
nmeros
que
queremos
para ordenar. Sin embargo, inmediatamente el algoritmo considera que la
lista que se compone de dos series de nmeros, el primer
"Conjunto" consiste en el primer nmero en la lista original, y el
segundo
set
se
compone
de
todo
el
resto
de
los
nmeros.
El primer conjunto es el conjunto de "ordenada" nmeros (como las
tarjetas ya ordenados en la mano), y el segundo conjunto es el
restantes conjunto de nmeros sin clasificar. La serie ordenada de
nmeros comienza slo contienen un nmero nico, pero como el
algoritmo producto, ms y ms de los nmeros sin clasificar, ser
trasladada
a
su
posicin
correcta
en
la
serie
ordenada.
La variable number_index realiza un seguimiento de dnde nos encontramos
en la lista de nmeros sin clasificar, sino que comienza en 2,
el primer nmero que es "sin clasificar". sorted_index La variable sigue
la
pista
de
donde
se
encuentran
entre
los
nmeros ordenados, que empieza en 1, ya que el primer elemento de la
lista
original
se
inicia
la
serie
de
"ordenada"
nmeros.
El algoritmo compara el prximo nmero que se inserta en la serie
ordenada
contra
el
ms
grande
de
los
clasificados
nmeros. Si el nuevo nmero es menor, entonces el algoritmo de turnos de
todos
los
nmeros
hasta
una
posicin
en
la
lista.
Esto
se repite, hasta que finalmente el algoritmo que se encuentra el nuevo
nmero
es
mayor
que
el
siguiente
nmero
ordenada,
y
el algoritmo pondr el nuevo nmero en la posicin correcta al lado del
nmero
menor.
Tambin es posible que el nuevo nmero es menor que la totalidad de los
nmeros
en
la
serie
ordenada.
El
algoritmo
sabr que ha ocurrido cuando sorted_index se convierte en 0. En ese
caso,
el
algoritmo
inserta
el
nuevo
nmero que el primer elemento en la serie ordenada.

Para repetir, la variable number_index realiza un seguimiento de dnde


est el algoritmo sin clasificar en el conjunto de nmeros.
El algoritmo comienza con el segundo nmero (number_index = 2). A
continuacin,
el
algoritmo
compara
el
nmero
para el mayor nmero que ha sido ordenada hasta el momento, num_list
[sorted_index].
Si
el
nmero
es
menor
que
el
previamente ordenada nmero, el algoritmo se mueve la ordenada
previamente
un
nmero
de
posicin
en
num_list,
y
controles de la nueva serie contra el prximo nmero ms grande en la
anteriormente ordenada de los elementos num_list. Por ltimo,
el algoritmo se encontrar con un nmero previamente ordenada, que es
menor
que
el
nmero
est
insertada,
o
que
encontrarse ms all de la posicin inicial de num_list. En ese momento,
el
nmero
puede
ser
insertado
en
el
num_list.
El algoritmo termina cuando todos los de las posiciones en el num_list
han
sido
ordenados.
Para analizar el tiempo de insercin de la especie, observamos en primer
lugar,
que
el
rendimiento
ser
proporcional
al
n, el nmero de elementos a ser ordenados. Tambin tomamos nota de que
cada uno de los elementos a ser ordenada debe ser una comparacin o
muchas veces con los elementos ya ordenados. En el mejor de los casos,
los elementos se ordenan ya, y cada uno de los elementos
slo requieren una nica comparacin, por lo que el mejor de los casos
el
rendimiento
de
la
insercin
tipo
es

(n).
En el peor de los casos, los elementos a los que se ordenan en orden
inverso, de modo que cada elemento de comparacin ser necesario
con todos los elementos ya ordenados. El segundo nmero se compara con
la
primera,
la
tercera
con
la
segunda
y en primer lugar, el cuarto con el tercer, segundo y primero, etc Si
hubiera
cuatro
nmeros
en
orden
inverso,
el
nmero
de
las comparaciones seran seis. En general, el nmero de comparaciones en
el
peor
de
los
casos
para
el
tipo
de
insercin
sern:

n2
/
2
n
/
2
El nmero de comparaciones crecer como el cuadrado del nmero de
elementos
a
ser
ordenados.
El
negativo
plazo de n / 2, y la divisin de n2 por la constante 2, significa que la
tasa
de
crecimiento
en
el
nmero
de
comparaciones
no ser la tarifa que implicara n2. Sin embargo, en caso de grandes
valores de n, esos trminos que no sean
n2 ser relativamente insignificante. Imagine el peor de los casos de
clasificacin
de
un
milln
de
nmeros.
El
plazo
n2
abrumar
a
los
dems
trminos
de
la
ecuacin.
Dado que por lo general un informa de la orden de crecimiento de un
algoritmo como el peor de los casos el orden de crecimiento, la
insercin
especie tiene una theta de n2, o (n2). Si uno calcula el promedio para
el caso del crecimiento de la insercin de clase, tambin un
considera una ecuacin cuadrtica, es slo algo menor, ya que, en
promedio,
cada
nuevo
elemento
se
comparar
con
slo la mitad de los elementos ya ordenados. Por lo tanto, dicen que el
desempeo
de
la
insercin
tipo
es

(n2).
Combinar tipo-Un ejemplo de orden de crecimiento de n (n lg) - Q (n lg
n)
Otro algoritmo para ordenar los nmeros utiliza la recursividad, una
tcnica
que
se
discutir
con
ms
detalle
en
breve,
dividir el problema en muchos pequeos problemas antes de recombinacin
de
los
elementos
de
la
plena
solucin.
Primero,
esta solucin requiere una rutina para combinar dos series de nmeros
ordenados
en
un
nico
conjunto.
Imagine dos montones de cartas, cada uno de ellos ordenados de menor a
mayor,
con
las
cartas
boca
arriba
en
dos
montones,
y los dos ms pequeas tarjetas de muestra. La fusin de rutina se
comparan las dos cartas que estn mostrando, y los lugares
tarjeta de pequeos boca abajo en lo que ser la fusionado montn.
Luego, la rutina se comparan las dos cartas que muestran despus de
la primera se ha puesto boca abajo sobre la fusionado montn. Una vez
ms,
la
rutina,
recoge
la
tarjeta
de
menor,
y
lo
pone
boca abajo sobre la fusionado montn. La fusin de rutina contina de
esta manera hasta que todas las cartas han sido trasladados
ordenados
en
la
fusionado
montn.
Aqu est pseudocdigo para la fusin de rutina. Se espera que para
trabajar en dos listas previamente ordenada de los nmeros, y
que combina las dos listas en una lista ordenada, que devuelve. La
variable ndice sigue la pista de donde se est trabajando
en
sorted_list.
La rutina compara la primera (arriba) los nmeros en las dos listas
originales,
y
pone
el
menor
de
los
dos
en
sorted_list. A continuacin, se descarta el nmero de la lista original,
lo
que
significa
que
el
nmero
que
se
utiliza
para
la
ser el segundo uno en la lista original se convierte en el primer nmero
en
esa
lista.
Una
vez
ms
la
rutina
compara
la
primera
nmeros en las dos listas, y de nuevo se mueve a los ms pequeos
sorted_list.
La rutina contina de esta manera hasta que uno de las listas originales
se convierte en vaco. En ese punto, se aade el resto de

los nmeros (que fueron ordenados en orden inicialmente, recuerde) a


sorted_list, y devuelve sorted_list.

El desempeo de fusin est relacionada con la longitud de las listas en


las
que
opera,
el
nmero
total
de
elementos que se fusionaron. El verdadero trabajo de la rutina en el
movimiento es la adecuada los elementos de las listas originales en
la lista ordenada. Dado que el nmero total de tales movimientos es
igual a la suma de los nmeros en las dos listas, fusionar
tiene una theta de Na + NB, o (Na + NB), donde Na + NB es igual a la
suma
de
los
nmeros
en
las
dos
listas.
El merge_sort utilizar la combinacin de rutina, pero en primer lugar,
la
merge_sort
se
divide
el
problema
hasta
en
ms pequeos y pequeas tareas de clasificacin. Luego merge_sort volver
a los pequeos en las listas de clasificados totalmente una lista
ordenada.
De hecho, merge_sort divide a la lista de nmeros hasta que cada
sublista
se
compone
de
un
nmero
nico,
que
puede
ser
considera una lista ordenada de longitud 1. Entonces el merge_sort
utiliza la combinacin de procedimiento para unirse al ordenados
sublistas.
La tcnica utilizada por merge_sort dividir el problema en subproblemas
se
llama
recursividad.
El
merge_sort se llama a s mismo repetidas veces hasta que la recursividad
"a
fondo"
con
las
listas
cuya
longitud
son
una.
Entonces
la recursividad "retornos", volver a los nmeros ordenados en orden como

lo
hace.
Aqu
est
pseudocdigo
para
la
fusin
tipo. Se toma la lista de nmeros para ser ordenados, y devuelve una
lista ordenada de los nmeros.

Vamos a seguir la ejecucin de merge_sort cuando uno pide con esta lista
de nmeros:
Nms = (1, 6, 4, 2)
1 En primer lugar, hacemos un llamamiento merge_sort pasar la lista
nms. Esto es lo que llamamos el "alto nivel" de la recursividad,
el nivel 0.
2 merge_sort pide merge_sort de nuevo, pasando una lista de los dos
primeros nmeros en nms. Esto Ordenar la parte delantera la mitad de la
lista. Este es el nivel 1 de la recursividad.
3 Ahora merge_sort pide merge_sort de nuevo, pasando slo el primer
nmero en nms. Este es el nivel 2.
4 Ahora merge_sort simplemente devuelve, es a un elemento en la lista,
merge_sort vuelve al nivel 1.
5 Ahora merge_sort pide merge_sort de nuevo, pasando slo el segundo de
los dos primeros nmeros en Nms. Este es el nivel 2.
6 Una vez ms, simplemente devuelve merge_sort, es a un elemento en la
lista, merge_sort vuelve al nivel 1.
7 En el nivel 1 de la recursividad, merge_sort ahora ha result_A y
result_B. merge_sort llamadas fusionar a los dos nmeros en orden y, a
continuacin, devuelve la ordenada par de nmeros de volver al nivel 0.
La primera mitad de la lista est ordenada.
8 de nivel 0, merge_sort pide merge_sort de nuevo, pasando una lista de
los dos ltimos nmeros en nms. Este tipo de la parte de atrs la mitad
de
los
nms.
Es
volver
al
nivel
1
de
la
recursividad.
9 merge_sort pide merge_sort de nuevo, pasando slo el primero de los
dos ltimos nmeros de nms. Esto es el nivel 2 de la recursividad de
nuevo.
10 Dado que la lista contiene slo un nmero, merge_sort simplemente
vuelve al nivel 1.
11 merge_sort pide merge_sort de nuevo, pasando slo el ltimo de los
nmeros de nms. Este es el nivel 2 de la recursividad de nuevo.
12 Dado que la lista contiene slo un nmero, merge_sort simplemente
vuelve al nivel 1.
13 En el nivel 1 de la recursividad, merge_sort ahora ha result_A y
result_B. merge_sort llamadas fusionar a las dos listas en el orden y, a
continuacin, devuelve la ordenada serie de dos nmeros de volver al
nivel
0.

14 En el nivel 0 de la recursividad, merge_sort ahora ha result_A y


result_B. merge_sort pide fusionar para poner las dos listas de nmeros
en orden y, a continuacin, devuelve todo el conjunto de cuatro nmeros
ordenados en orden.
Adems de ser un interesante ejercicio de la recursividad, la merge_sort
proporciona rendimiento atractivo. El tipo de combinacin tiene una
theta de n (n lg), que para los grandes problemas es mucho mejor que el
theta de n2 para el tipo de insercin.
La recursividad en merge_sort divide el problema en muchos subproblemas
en
repetidas
ocasiones
por
reducir
a
la
mitad
el
tamao
de la lista a ser ordenada. El nmero de veces que la lista debe ser
dividido
por
dos,
a
fin
de
crear
listas
de
longitud
un
es igual al logaritmo de la base 2 del nmero de elementos en la lista.
En el caso de nuestro 4-elemento ejemplo, el logaritmo de la base 2 de 4
es
2,
porque
22
=
4.
Esto
puede
ser
escrito
como log2 n, pero en ciencias de la computacin, debido a la ubicuidad
de las matemticas binarias, esto es generalmente escrito como lg n, en
el
sentido
de
logaritmo
de
la
base
2
del
n.
El total de tiempo de ejecucin T, de la fusin consiste en ordenar el
tiempo de forma recursiva resolver dos problemas de la mitad
el tamao y, a continuacin, para combinar los resultados. Una forma de
expresar el tiempo que se requiere es la siguiente:
T = 2T (n / 2) + fusin
Desde fusin se ejecuta en (Na + NB), y desde Na + NB = n, vamos a
repetir esto:
T = 2T (n / 2) + (n)
Un rbol de recursin es una forma de visualizar el tiempo necesario. En
el nivel superior, tenemos el tiempo necesario para fusionar (n), ms
el tiempo necesario para los dos subproblemas:
(n)
T (n / 2), T (n / 2)
En el siguiente nivel, tenemos el tiempo necesario para las dos fusiones
de los dos subproblemas, y para promover la subdivisin de los dos
subproblemas:
(n)
(n / 2) (n / 2)
T (n / 4) T (n / 4) T (n / 4) T (n / 4)
Podemos seguir este tipo de expansin hasta que el rbol es lo
suficientemente profunda para el tamao del problema general:
(n)
(n / 2) (n / 2)
(n / 4) (n / 4) (n / 4) (n / 4)
...
...
Aadiendo
a
travs
de
cada
fila,
nos
encontramos
con:
Suma
(n) (n)
(n / 2) (n / 2) (n)
(n / 4) (n / 4) (n / 4) (n / 4) (n)
...
...
Para cualquier problema particular, porque repetidamente dividir el
problema
en
dos,
que
tendr
como
muchos
niveles
como (lg n). Por ejemplo, nuestro ejemplo con cuatro nmeros slo haba

dos
niveles
de
recursividad.
Un
problema
con
ocho
nmero tendr tres niveles, y un problema con 16 nmeros de cuatro.
Resumiendo lo largo de todo el problema, entonces, nos encontramos con
la combinacin tipo tiene una theta de n (n lg). Hay (lg n) los niveles,
cada una con de theta una n. Por lo tanto, el tipo de combinacin tiene
un
orden
de
crecimiento
de

(n
(lg
n)).
Esta es una gran cosa, porque para las grandes series de nmeros, n (lg
n)
es
mucho
menor
que
n2.
Supongamos
que
que un milln de nmeros debe ser ordenada. El tipo de insercin
requerir
del
orden
de
(106)
2,
o
1000000000000 unidades de tiempo, mientras que el tipo de combinacin se
requieren en el orden de los 106 (LG 106), o 106 (20),
o 20.000.000 unidades de tiempo. El tipo de combinacin ser casi cinco
rdenes de magnitud ms rpido. Si una unidad de tiempo es
una millonsima de segundo, el tipo de combinacin se completa en 20
segundos,
y
el
tipo
de
insercin
requerir
a
la
semana
y medio!
Bsqueda binaria-un ejemplo de orden de crecimiento de (lg n)-Q (lg n)
Anteriormente hemos discutido el algoritmo de bsqueda secuencial y
encontr
a
su
desempeo
se

(n).
Uno
puede
buscar
mucho ms eficaz si uno sabe la lista est en orden para comenzar. La
mejora
de
la
eficiencia
es
similar
a
la
mejorar la utilidad de una gua telefnica cuando las entradas se
ordenan por orden alfabtico. De hecho, para la mayora de
comunidades, una gua telefnica, donde las entradas no fueron ordenados
alfabticamente
unthinkably
sera
ineficaz!
Si la lista para ser buscado ya est ordenado de menor a mayor, el
algoritmo
de
bsqueda
binaria
puede
encontrar
en cualquier entrada (lg n) tiempo. Si la lista contiene 1000000
entradas, lo que significa que la bsqueda binaria se busque el
tema despus de leer menos de 20 entradas. La bsqueda secuencial, en
promedio,
tendr
que
leer
500.000
entradas.
Qu
diferencia!
El binario de bsqueda repetitiva de obras de dividir la lista en la
mitad.
Se
comienza
comparando
el
elemento
en
el
media de la lista con el tema tratado. Si el tema de bsqueda es menor
que
el
elemento
en
el
medio
de
la
lista,
la bsqueda binaria lee el elemento en el centro de la primera mitad de
la lista. Entonces, si la bsqueda es el tema ms grande
que ese elemento, la bsqueda binaria lee el siguiente elemento en el
centro
de
la
segunda
mitad
de
la
primera
mitad
de
la lista. Finalmente, la bsqueda se encuentra el elemento buscado, o
llega a la conclusin de que el elemento no est presente en la lista.
Aqu est un pseudocdigo de bsqueda binaria:

En cada iteracin, la bsqueda binaria reduce el tamao de la lista a


ser
buscado
por
un
factor
de
2.
Por
lo
tanto,
el
bsqueda binaria en general se encuentra el tema de bsqueda, o la
conclusin de que la bsqueda tema no est en la lista, cuando el
algoritmo se ha ejecutado (lg n) iteraciones o menos. Si hay siete
elementos
de
la
lista,
el
algoritmo
completo
en tres iteraciones o menos. Si hay 1000000 temas en la lista, el
algoritmo
se
completa
en
20
iteraciones
o menos.
Si la lista original que pasa a ser una perfecta potencia de 2, el
nmero
mximo
de
iteraciones
de
la
binario
bsqueda puede ser mayor que 1 (lg n). Cuando el tamao de la lista es
una perfecta potencia de 2, hay dos temas en el (lg n)
nivel, por lo que una iteracin ms puede ser necesario en esa
circunstancia.
Por
ejemplo,
si
hay
ocho
elementos
de
la
lista, el algoritmo se completa en (3 + 1) iteraciones o menos.
En cualquier caso, el tiempo de ejecucin de la bsqueda binaria es
(lg
n).
Esta
eficiencia
se
recomienda
como
una
bsqueda
algoritmo, y tambin, por lo tanto, justifica a menudo la labor de
mantenimiento de bsquedas en las listas de frecuencia en orden.
Problemas insolubles
Los algoritmos hasta ahora todos tienen un orden de crecimiento que
puede
ser
descrito
por
algunos
ecuacin
polinmica
en n. A "polinomio en n" se entiende la suma de algunos trminos de
nmero,
donde
cada
trmino
consta
de
n
elevado
a
algunos
potencia y multiplicado por un coeficiente. Por ejemplo, la insercin
orden
de
crecimiento
es
(n2
/
2
n
/
2).
Cuando un algoritmo tiene un orden de crecimiento que es mayor que puede
ser
expresada
por
algunos
ecuacin
polinmica
en n, entonces equipo de cientficos se refieren como el algoritmo
intratable.
Si
no
mejor
algoritmo
puede
ser
descubierto
a
resolver el problema, los cientficos se refieren al problema como un
problema
insoluble.
Como un ejemplo de un problema insoluble, considere la posibilidad de un
problema de la bioinformtica. El Departamento de Gentica en
Yale Escuela de Medicina mantiene una base de datos de informacin
gentica
obtenida
de
diferentes
poblaciones
humanas.
ALFRED (alelo de frecuencia de base de datos) es un repositorio de los

datos
genticos
de
494
antropolgicamente
definido
las poblaciones humanas, por ms de 1.600 polimorfismos (diferencias en
las
secuencias
de
ADN
entre
los
individuos).
Sin embargo, los investigadores han recogido datos de slo alrededor del
6
por
ciento
de
la
poblacin
posible
polimorfismo
combinaciones, de modo que la mayor parte de las entradas en la base de
datos
estn
ausentes.
Cuando la poblacin genetistas tratan de encontrar el mayor nmero
posible
subconjunto
de
la
poblacin
y
de
los
polimorfismos
que existen datos completos (es decir, medidas existen para todos los
polimorfismos de todas las poblaciones), los investigadores estn
frente a un problema computacionalmente intratable. Este problema
requiere
que
cada
subconjunto
de
los
elementos
en la matriz ser examinados, y el nmero de subconjuntos es muy grande!
El nmero de subconjuntos entre los elementos n es 2n, ya que cada
elemento
puede
ser
en
un
subconjunto
o
no. Para nuestro problema, el nmero de elementos de nuestro conjunto es
el
nmero
de
posibles
entradas
en
la
base
de
datos.
Eso
es decir, la base de datos ALFRED nos presenta 2 (494 * 1600)
subconjuntos para investigar! Para exhaustiva prueba de la mayor
subconjunto de datos completos, habra que enumerar todos los subgrupos,
y cada uno de prueba para ver si en todas las entradas
el
subconjunto
que
figuran
las
mediciones!
Evidentemente, el orden de crecimiento de este tipo de algoritmo es 2n;

(2n).
Esta
es
una
funcin
exponencial
de
n,
no
un polinomio, y hace una diferencia muy importante. Un algoritmo
exponencial rpidamente se convierte en intratable.

Figura 2-2 Comparacin de los pedidos de crecimiento.


Por ejemplo, resolver el problema de una matriz de 20 entradas se
requieren alrededor de un milln de unidades de tiempo, pero la solucin
de
el problema de una matriz de 50 entradas se requieren alrededor de un
milln de millones de unidades de tiempo. Si una unidad de tiempo es una
millonsima
de un segundo, el problema de tamao 20 ser necesario un segundo a
calcular,
pero
el
problema
del
tamao
se
requieren
50
ms de 25 aos. ALFRED la base de datos es de tamao 494 * 1600 =
790400. Los estudiantes se gradan con la esperanza de necesidad
un
mejor
algoritmo
o
un
problema
diferente!

Otro ejemplo de un problema insoluble es el famoso problema de viajante


de
comercio.
Este
problema
es
tan famoso que tiene su propio acrnimo, el TSP. El vendedor tiene que
visitar
cada
uno
de
varias
ciudades,
y
quiere
hacerlo
sin visitar la ciudad ms de una vez. En aras de la eficiencia, el
vendedor
quiere
reducir
al
mnimo
la
duracin
del
viaje.
El vendedor debe visitar cada ciudad, pero puede visitar las ciudades en
cualquier
orden.
Encontrar
la
ruta
ms
corta
requiere
calcular la distancia total para cada permutacin de las ciudades el
vendedor
debe
visitar,
y
seleccionar
el
ms
breve
uno. En realidad, desde una ruta en una direccin es la misma distancia
que
la
ruta
inversa,
slo
la
mitad
de
las
permutaciones
de las ciudades tienen que ser calculados. Dado que el nmero de
permutaciones de n objetos es igual a n-factorial (n! O * n
(n-1) * (n-2) ... * 2 * 1), el nmero de rutas para poner a prueba crece
como el factorial del nmero de ciudades, dividida por 2.
Por lo tanto, el orden de crecimiento de la TSP problema es n-factorial;
(n).

lg n

n lg n

n2

2n

Clasificacin
constante: en tiempo de ejecucin es fijo, y no depende
de n. La mayora de las instrucciones se ejecutan una
vez,
o slo un par de veces, independientemente de la
cantidad de informacin que est siendo procesado.
logartmico: cuando n aumenta, tambin lo hace en tiempo
de ejecucin, pero mucho ms lentamente que n no. Cuando
n
dobles, lg n aumenta en un constante, pero no hasta el
doble
n
aumenta
a
n2.
En
comn
programas
que
resolver
grandes
problemas
transformndolos en problemas ms pequeos.
lineal: tiempo de ejecucin vara directamente con n.
Normalmente, una pequea cantidad de procesamiento se
realiza
en
cada uno de los elementos.
cuando n se duplica, el tiempo de duracin de poco ms
de dobles. Comunes en los programas que romper
por un problema en subproblemas ms pequeos, resolver
de forma independiente y, a continuacin, combinar
soluciones.
cuadrticas: cuando n se duplica, en tiempo de ejecucin
aumenta cuatro veces. Prctica slo para los pequeos
problemas;
normalmente el programa procesa todos los pares de
entrada (por ejemplo, en un doble bucle anidada).
exponencial: cuando n se duplica, el tiempo de duracin
de las plazas. Esto es a menudo el resultado de una
natural,
"fuerza
bruta"
solucin. Estos problemas no son computables en un
tiempo razonable cuando el problema se convierte en
en todos los grandes.

A factorial orden de crecimiento es incluso ms extrema de una orden de


exponencial
crecimiento.
Por
ejemplo,
son alrededor de un 3,6 millones de permutaciones de 10 ciudades, pero
ms de 2 billones de millones de permutaciones de 20. Si el equipo
puede calcular la distancia de un milln de permutaciones un segundo, el
problema
de
TSP
se
llevar
a
1,8
segundos
para
10 ciudades, pero decenas de miles de aos de 20 ciudades.
Figura 2-2 muestra las tasas de crecimiento para lg N, N, N (lg n), n2,
2n
y
n!
Tabla 2.1 se resumen algunos de los diferentes rdenes de crecimiento, y
las
caractersticas
de
los
algoritmos
asociados.
Algoritmos
como
la
tecnologa
Es muy emocionante para comprar un nuevo equipo con el doble, cuatro
veces, o incluso diez veces la tasa de reloj de la antigua
computadora. Muchas personas piensan del equipo de velocidad como la
medida
del
avance
tecnolgico.
Habiendo
discutieron los algoritmos y su rendimiento, si un algoritmo mejor en un
equipo
ms
lento
podra
ser mejor que un algoritmo ms lento en un equipo ms rpido.
Como ejemplo, considere la posibilidad de una tarea de clasificacin.
Supongamos que usted necesita para ordenar un milln de nmeros (nmeros
de
la
seguridad
social,
por ejemplo). Tiene la opcin de usar su actual equipo con una
combinacin
de
tipo
de
programa,
o
de
la
compra
un nuevo equipo, que es 10 veces ms rpido, sino que utiliza un tipo de
insercin.
El tipo de insercin en el nuevo equipo ser necesario en el orden de
(106) 2, o un milln de millones de ciclos, mientras que
Ordenar la fusin requerir del orden de 106 (LG 106), o 106 (20), o 20
millones
de
ciclos.
Incluso
cuando
se
ejecuta
sobre
su antiguo equipo, el tipo de combinacin de voluntad ejecutarse cuatro
rdenes de magnitud ms rpido que el tipo de insercin en el
nueva mquina. Si se tarda 20 segundos para ejecutar el tipo de
combinacin de su antiguo equipo, que tendr ms de 27 horas para
ejecutar
Ordenar
la
insercin
en
la
nueva
mquina!
Algoritmo de diseo debe considerarse importante la tecnologa. Un mejor
algoritmo
puede
hacer
la
diferencia
entre ser capaz de resolver el problema o no, y un mejor algoritmo puede
hacer
una
diferencia
mucho
mayor
que
todo a corto plazo mejora en la velocidad del hardware.
Modelos
formales
de
la
computacin
La teora de la computacin ha avanzado mediante la adopcin de modelos
formales
de
clculo
cuyas
propiedades
pueden
ser
explorar matemticamente. El ms influyente modelo fue propuesto por el
matemtico
Alan
Turing
en
1936.
Turing utiliza el ser humano como el modelo de computacin agente. l
imagin
un
ser
humano,
en
un
cierto
estado
de
nimo,
buscando en un smbolo sobre el papel. El ser humano reacciona ante el
smbolo
sobre
el
papel
de
1 de borrar el smbolo, o borrar el smbolo y la escritura de un nuevo
smbolo,
o
no,
2 tal vez cambiar su estado de la mente como resultado de contemplar el
smbolo
y,
a
continuacin,

3 contemplar otro smbolo en el documento, junto a la primera.


Este modelo de clculo capta la capacidad de aceptar de entrada (desde
el
papel),
almacenar
informacin
en
memoria (tambin en el papel), tome acciones diferentes en funcin de la
aportacin
y
la
del
agente
de
la
informtica
"estado
de
mente ", y la salida (tambin en el documento). Turing refundicin
drsticamente
este
modelo
simple
de
clculo
en
forma
matemtica,
y
algunos
derivados
de
los
descubrimientos
fundamentales sobre la naturaleza de la computacin. En particular,
Turing demostr que algunos problemas importantes no se pueden resolver
con
cualquier
algoritmo.
Demostr
que
no
estas
los problemas no tienen solucin conocida; demostr que estos problemas
no
puede
tener
nunca
una
solucin.
Por
ejemplo,
demostrado que uno nunca ser capaz de escribir un programa que ser
capaz
de
determinar
si
alguna
otra
arbitrario
programa
a
ejecutar
una
correcta
ejecucin,
o
accidente.
Hmmm ... que es muy mala ... sera bueno tener un programa para
controlar
nuestro
trabajo
y
nos
diga
si
o
no
nuestro
nuevo
programa
nunca
accidente.
La concepcin matemtica de Turing del modelo de clculo se llama una
mquina
de
Turing
o
TM.
A
TM
suele describirse como una mquina de lectura de una cinta.
La cinta contiene smbolos o espacios en blanco, y la cinta puede ser
infinitamente
largo.
La mquina puede leer un smbolo a la vez, coloca el smbolo en virtud
de
la
"lectura
/
escritura
de
cabeza"
de
la
TM.
La mquina tambin puede borrar el smbolo, o escribir un nuevo
smbolo,
y
puede
entonces
la
posicin
de
una
cinta
celda
a
la
izquierda
oa
la
derecha.
La mquina en s mismo puede estar en uno de un nmero finito de
estados, y la lectura de un smbolo puede causar el estado
de
TM
para
el
cambio.
Un estado es el estado detener, que es el estado de la mquina cuando
se termina normalmente.
Cuando la mquina se inicia, est en estado 1, que se coloca en el
extremo
extremo
izquierdo
de
la
cinta,
y
la
cinta
se
extiende
indefinidamente
a
la
derecha.
Un particular TM tendr un conjunto de instrucciones que entiende. Cada
instruccin
se
compone
de
un
5-tupla
(rimas
con pareja), que es una forma matemtica de decir que una instruccin
consta
de
cinco
valores.
Estos
valores
son
1,
el
estado
actual
2,
el
smbolo
actual
est
leer
3,
el
smbolo
con
el
que
sustituir
a
la
actual
smbolo
4,
el
estado
prximo
a
entrar
en
5, la direccin para mover la cinta (derecha, izquierda, o estacionario)
Como un primer ejemplo, supongamos que un TM incluye estas tres
instrucciones
(
significa
blanco):
1
(1,
0,
1,
1,
a
la
derecha)
2
(1,
1,
0,
1,
a
la
derecha)
3
(1,
,
,
detener,
estacionario)
La primera dice que si el smbolo se lee es un 0, reemplazarlo con un 1
y
mover
hacia
la
derecha.
La
segunda
dice
que

si el smbolo se lee es un 1, sustituir con un 0 y mover hacia la


derecha.
La
tercera
dice
que
si
el
smbolo
se
lee
es
un
blanco,
detener
la
mquina
sin
mover
la
cinta.
Supongamos que la cinta presenta a este TM contiene los smbolos:
1
1
0
1
0
1
0
0

...
A partir de Estado 1, y coloca a la extrema izquierda de la cinta, la
mquina
lee
el
smbolo
1.
Instruccin
2 se aplica a esta situacin, por lo que la instruccin de la causa 1, y
se sustituye por un 0, la mquina del Estado a permanecer 1,
y la mquina para mover la celda 1 a la derecha en la cinta.
A continuacin, la dice otra TM 1. Instruccin 2 se aplica de nuevo, por
lo que el TM cambios el segundo 1 a un 0, y se mueve
la derecha de nuevo, permaneciendo en estado 1.
Cuando el TM lee el smbolo 0, la instruccin 1 se aplica, por lo que la
instruccin
hace
que
el
1
a
0
se
sustituir
por
un
1,
la mquina para permanecer en el estado 1, y la mquina se desplace a la
derecha
una
vez
ms.
Como la mquina avances en la cinta, cada 1 ser cambiado a un 0, y cada
0
pasar
a
ser
1. Por ltimo, la mquina dar lectura a un blanco. En ese caso, la
instruccin
3
se
aplicarn,
y
la
mquina
va
a
detener.
Este simple TM es una mquina para complementar (invertir) los bits de
un
nmero
binario.
El
resultado
de
la
clculo
ser
una
cinta
que
contiene
estos
smbolos:
0
0
1
0
1
0
1
1

...
Como complemento de los bits de un nmero binario es con frecuencia una
tarea
necesaria,
por
lo
que
esta
es
una
til
TM.
Un poco ms compleja tarea es la de complementar y un creciente nmero
binario.
Esta
operacin
es
a menudo utilizado por las computadoras para llevar a cabo la resta
binaria. De hecho, en los "viejos tiempos" cuando el nico clculo
mquinas disponibles eran mquinas mecnicas, las personas que realizan
la
sustraccin
de
la
misma
manera
en
base
10,
utilizando los 10 del complemento mtodo. Para restar 14 de 17 en base
10,
se
encontraron
los
9
del
complemento,
de
14,
que
es 85 (restar 1 del 9 al obtener el 8, y restar 4 de 9 a obtener el 5).
Se
incrementa
85
por
1,
para
obtener
86,
o
lo que se llama los 10 del complemento. Adicin de 17 y 86 dio 103.
Haciendo caso omiso de llevar el dgito dio la respuesta de 3!
Para realizar la resta binaria por la 2 del complemento mtodo, el
subtrahend
se
complementa
y
incrementa y, a continuacin, aade a la minuend. Por ejemplo, para
restar
2
de
5,
que
pueden
complementar
e
incrementar
la
2, y aadir que a 5 para obtener 3:
010 2 (en base 2: 0 cuatro, el 1 de dos, 0 unidades)
101 2 complementarse (1S -> 0s; 0s -> 1s)
110 2 y complementado incrementa
(adicin de 001 a 101 -> 110 en base 2)
+101 5 (1 cuatro, 0 doses, 1 unidad)
1011 3 (en base 2: 0 cuatro, 1 dos, 1 unidad -ignorar el llevar poco a la izquierda)

Dado que resta es a menudo necesaria, de una TM para complementar y un


creciente nmero binario es interesante.
Aqu estn las instrucciones para esa mquina:
1 (1, 0, 1, 1, a la derecha)
2 (1, 1, 0, 1, a la derecha)
3 (1, , , 2, izquierda)
4 (2, 0, 1, 3, a la derecha)
5 (2, 1, 0, 2, izquierda)
6 (3, 1, 1, 3, a la derecha)
7 (3, 0, 0, 3, a la derecha)
8 (3, , , detener, estacionario)
Instruccin 1 y 2 son las mismas que para la simplificacin de TM que
complementa
los
bits
en
la
cinta.
Instruccin 3 se aplicar cuando el TM ha complementado todos los bits y
las
encontradas
en
blanco
en
el
extremo
derecho
de la cinta. Cuando esto sucede, la mquina va a entrar en estado 2 y
mover
hacia
la
izquierda.
Si la mquina se encuentra en estado 2 encuentros y un 0, la instruccin
4
har
que
el
0
a
ser
sustituido
por un 1, la mquina para entrar en estado 3, y mover hacia la derecha.
Una vez que la mquina se encuentra en estado 3, instrucciones 6 y
7 har que el equipo se desplace a la derecha sin ms cambios en el
contenido
de
la
cinta.
Cundo
finalmente la mquina se encuentra en blanco a la derecha de nuevo, la
instruccin
8
har
que
la
mquina
para
detener.
Si la mquina se encuentra en estado 2 y se encuentra a 1, 5 instruccin
provocar
que
el
1
se
sustituye
por
un
0,
el
mquina para permanecer en el estado 2, y mover a la izquierda de nuevo.
Esto continuar en la forma hasta que el TM encuentra un 0,
en cuyo caso la instruccin 4 se aplicar, tal como se describe en el
prrafo
anterior.
Usando el nmero binario el 2 como ejemplo de nuevo, el TM se crea la
siguiente
contenido
de
la
cinta
como
se ejecuta:
0
1
1
1
1

1
0
0
1
1

0
1
0
0
0

cinta original
complementar completa
despus de ejecutar la instruccin 5
despus de ejecutar la instruccin 4
detenido despus de ejecutar la instruccin 8

Este TM obras de muchos insumos, pero no todos. Supongamos que la


original
cinta
de
entrada
eran
todos
ceros:
0
0
0

cinta
original
Despus de que el complemento est completa, y todos los 0s convertirse
en 1s, el TM de copia de seguridad de ms de la cinta en varias
ocasiones
instruccin de ejecucin 5. Es decir, que una copia de seguridad de cada
cambio de 1 a 0. En este caso, sin embargo, el TM nunca
encuentro un 0, donde la instruccin 4 pondra a la TM en el estado 3 y
TM
iniciar
el
movimiento
hacia
el
final
de
la
cinta
y
un
buen
detener.

En cambio, el TM, en ltima instancia, encuentro el primer smbolo en la


cinta,
y
la
instruccin
5
se
lo
mando
para mover de nuevo a la izquierda. Dado que la mquina no puede ir ms
lejos
en
esa
direccin,
la
mquina
"se
cuelga".
Asimismo, el TM se colgar si uno de los smbolos de la cinta es algo
distinto
de
1
o
0.
No
se
no instrucciones de este TM para el manejo de cualquier otro smbolo,
por lo que una cinta de entrada, como esto causar tambin a la TM
accidente:
0
3
0

cinta
original
Otra forma un TM puede fallar es por entrar en un bucle infinito. Si la
instruccin
7
supra
se
especifica
un
paso
a
la
izquierda en lugar de la derecha, entrada de determinadas cintas que
contienen slo 1s y 0s que causa la TM para entrar en una interminable
bucle, se desplazan hacia adelante y hacia atrs sin cesar entre dos
clulas
adyacentes
en
la
cinta.
Algoritmos puede especificarse como TM y, al igual que todos los
algoritmos,
TM
debe
ser
la
prueba
de
exactitud,
dado
aportes esperados.
TESIS DE CHURCH-TURING
La mquina de Turing se piensa que es un modelo muy general de la
computacin. En 1936, Alonzo Church lgico avanzada la tesis de que
cualquier procedimiento algortmico para manipular smbolos, llevada a
cabo por los seres humanos o de cualquier mquina, puede ser llevada a
cabo por algunos TM.
No es posible demostrar con rigor esta proposicin, por la nocin de un
algoritmo no se especifica matemticamente.
Sin embargo, la Iglesia-la tesis de Turing ha sido ampliamente probado,y
es ahora aceptado como cierto. Uno no desea escribir un TM para una
tarea compleja como el diseo de un conjunto de escaleras para una
escalera, pero se podra hacer.
La importancia de tener un modelo de clculo es que el modelo se ha
utilizado para demostrar que algunos tareas no puede lograrse con una
TM. Si la Iglesia-la tesis de Turing es cierto, entonces las tareas para
las que uno no puede TM tener xito son tareas que simplemente no tienen
solucin algortmica.
Insoluble PROBLEMAS
Sera muy til disponer de una forma rpida de saber si un determinado
programa, siempre y cuando con cualquier conjunto particular de los
insumos, llevar a cabo a la terminacin y detener, o en lugar continuar
interminablemente. En equipo la ciencia, esto se conoce como la
"detencin de problema." Habida cuenta de un programa, y un conjunto de
insumos, el programa se ejecute a la realizacin o no? Hay algn un
algoritmo que puede aplicar, por cualquier programa y cualquier conjunto
de insumos, determinar si el programa se ejecutar a la realizacin o
no?
Uno podra sugerir simplemente ejecuta el programa, siempre que el
particular insumos, y ver si el programa se detiene o no. Si el programa
se ejecute a la realizacin y detener, sabrs que se detiene. Sin
embargo, si el programa a seguir para ejecutar, usted nunca se sabe si
el programa continuar para siempre, o detener el tiempo. Lo que se

necesita es un algoritmo para inspeccionar el programa, un algoritmo que


nos dicen si el programa va a detener el tiempo, dado un determinado
conjunto de insumos.
Si hay un algoritmo de este tipo para la inspeccin de un programa, hay
un TM para ponerla en prctica. Lamentablemente, sin embargo,
detener el problema ha demostrado ser un problema insoluble, y la prueba
de que no hay solucin es una prueba de contradiccin. Empezamos por el
supuesto de que hay, de hecho, una TM que implementa una solucin a la
interrupcin problema. Vamos a llamar a este TM 'H', de los que resuelve
el gran problema de detener.
La entrada a la H debe incluir tanto el programa bajo prueba p, y la
entrada al programa i. En pseudocdigo, hacemos un llamamiento H como
este:
H (p, i)
Suponemos que H se debe detener, y que la salida de H debe ser verdadera
o falsa-de conformidad con el programa prueba debe ser encontrado, ya
sea para detener o no a detener. Sea cual sea H no, no simplemente
confiar en el funcionamiento programa bajo prueba, porque H se debe
siempre detener en un plazo de tiempo razonable.
Ahora supongamos que vamos a crear otro llamado TM nada que tenga un
argumento
simblico
que
incluir
la
codificacin de un programa, p. Nada llamar H, pasando el cdigo de p,
como
el
programa
P
y
los
datos
de
entrada
i
de la prueba. (TM puede vincularse esta manera, pero los detalles no son
importantes
a
este
debate.)
Nada
volver
H verdadero si no a detener en esas condiciones, y bucle para siempre si
no
detener
H.
En
pseudocdigo
se
ve
nada
de
este
modo:
Nada
(p)
if
(H
(p,
p)
es
falso)
retorno
verdadero
algo
ms
while
(true)
()
/
/
loop
para
siempre
endNotH
Ahora supongamos que nada prueba con este enfoque. Es decir, supongamos
que
pasar
el
cdigo
para
nada
a
Nada. Nos referiremos a el cdigo para nada como "nh", y podemos
preguntar,
"Tiene
el
programa
detener
nada
cuando
se
se ejecuta con su propio cdigo como entrada? "Decir esto de otra
manera,
no
nada
(NH)
detener?
Si nada (NH) se detiene, esto slo puede ser debido a que H (nh, nh)
informa
que
nada
no
detenerse.
Por
otro
parte, si nada (NH) no se detenga, esto slo puede ser debido a que H
(nh,
nh)
informa
que
nada
hace
detener.
Estos
son
Obviamente, las contradicciones.
La hiptesis original, que un TM existe que pueda determinar si un
determinado programa ejecutar a la terminacin cuando se present con
cualquier arbitraria datos de entrada, debe ser incorrecta. Supuesto que
condujo a la contradictorias estado ilustrada por nada. Por lo tanto,
los
cientficos
concluyen
que
no
puede
haber
un
algoritmo
que puede determinar si un determinado programa se ejecutar a la
realizacin, o no se complete, por cada la medida de lo posible de los
insumos.

Sera muy bueno tener un programa al que se podra presentar nuevo


cdigo para una rpida determinacin a si ira a la terminacin habida
cuenta de cualquier conjunto particular de los insumos. Por desgracia,
Turing demuestra que esto no puede ser. Uno puede y debe escribir los
programas de prueba, pero nunca un xito por escrito un programa que
puede probar cada programa.
El "detener problema" es uno de los problemas irresolubles provably en
computacin (Turing, Alan, "On computable Nmeros con una solicitud a la
Entscheidungsproblem ", Actas de Matemticas de Londres Sociedad, 2:230265, 1936). Un algoritmo no ser nunca escrito para demostrar la
correcta o incorrecta ejecucin de todo lo posible cuando se present el
programa con cualquier conjunto particular de los insumos. Si bien tal
algoritmo no puede ser xito, a sabiendas de computadora que permite a
los cientficos centrarse en los problemas para los cuales existen
soluciones.
RESUMEN
Un algoritmo es un procedimiento especfico para la consecucin de
algunos puestos de trabajo. Gran parte de la informtica tiene que ver
con para encontrar o crear mejores algoritmos computacionales para la
solucin de problemas.
Nos suelen describir utilizando algoritmos computacionales pseudocdigo,
y caracterizar el desempeo de algoritmos utilizando el trmino "orden
de crecimiento" o "theta". El orden de crecimiento de un algoritmo nos
dice, en un simplificado
As, la forma en que el tiempo de ejecucin del algoritmo puede variar
en funcin de los problemas de diferentes tamaos. Nos dieron ejemplos
de algoritmos cuyas rdenes de crecimiento (lg n), n, n (lg n), n2, n y
2n!.
Algoritmo de desarrollo debe considerarse una parte importante de la
tecnologa informtica. De hecho, una mejor algoritmo para una tarea
importante puede ser mucho ms impactante que cualquier previsible a
corto plazo en la mejora hardware de computacin velocidad.
La mquina de Turing es un modelo matemtico formal de la computacin, y
la Iglesia-la tesis de Turing sostiene que cualquier procedimiento
algortmico para manipular los smbolos pueden ser llevadas a cabo por
algunos mquina de Turing.
Dimos ejemplo mquinas de Turing para llevar a cabo las operaciones de
simple binario de complementar y creciente un nmero binario.
Algunos problemas en la informtica son provably insoluble. Por ejemplo,
Turing demostr que es imposible escribir un programa de computadora que
puede inspeccionar cualquier otro programa y verificar que el programa
en cuestin, o no, ejecute a la conclusin, habida cuenta de cualquier
conjunto especfico de insumos. Si bien el "Santo Grial" de un algoritmo
para probar la correccin de los programas ha demostrado ser slo un
fantasma en los sueos de los cientficos, computadora cientficos por
lo menos sabemos que es as, y puede trabajar en lugar de una prueba
prctica planes reales de los programas.
REPASO DE PREGUNTAS
2.1 Escribir pseudocdigo
cuadrada de un nmero.

de

un

algoritmo

para

encontrar

la

raz

2.2 Escribir pseudocdigo para encontrar la media de un conjunto de


nmeros.
Cuenta la 2.3 primitivas operaciones en su algoritmo para encontrar la
media. Cul es el orden de crecimiento de su significa algoritmo?
2.4 Escribir pseudocdigo para encontrar la mediana de un conjunto de
nmeros.
2.5 Qu es el orden de crecimiento de su algoritmo para encontrar la
mediana?
2.6 Suponga que su algoritmo para encontrar la media es (n), y que su
algoritmo para encontrar la mediana es (n lg n), Cul ser la
velocidad de ejecucin relacin entre su algoritmo para la media y su
algoritmo para la mediana, cuando el nmero de valores es 1.000.000?
2.7 Una especie de rutina que es fcil de programa es el tipo de
burbuja. El programa simplemente escanea todos los elementos
que se clasifican en varias ocasiones. En cada paso, el programa compara
cada elemento con el uno junto a ella, y reordena los dos, si estn en
orden inverso. Por ejemplo, para ordenar la siguiente lista:
6 7 3 1 4
Especie de burbuja comienza comparando 6 y 7. Ellos estn en el orden
correcto, por lo que luego se compara 7 y 3. Ellos estn en orden
inverso, de modo que los intercambios de burbuja tipo 7 y 3 y, a
continuacin, se compara 7 y 1. Los nmeros 7 y 1 estn en orden
inverso, por lo que los canjes de tipo burbuja y, a continuacin, se
compara 7 y 4. Una vez ms, el orden es incorrecta, por lo que los
canjes de 7 y 4. Fin de exploracin 1:
6 3 1 4 7
Exploracin de la izquierda a la derecha de nuevo en los resultados:
3 1 4 6 7
Exploracin de la izquierda a la derecha una vez ms resultados corregir
en un pedido:
1 3 4 6 7
Escribir pseudocdigo de la burbuja tipo.
2.8 Qu es la burbuja tipo T?
2.9 Cmo va la burbuja tipo para comparar la velocidad con la
combinacin tipo cuando la tarea es de tipo social 1000000
nmeros de la seguridad que inicialmente estn en orden aleatorio?

CAPITULO 4

SOFTWARE

En este captulo se presentar una amplia variedad de temas relacionados


con los programas informticos y los lenguajes de programacin.

Vamos a discutir algunas de las historia de las lenguas, y describir


algunas de las variedades de las lenguas.
A continuacin vamos a examinar el funcionamiento de los programas de
procesamiento de lenguaje que construir el cdigo ejecutable a partir de
cdigo fuente escrito por los programadores. Todos estos debates ser
incompleta-se destinan slo a
introducir los temas. Sin embargo, esperamos a impartir un sentido de la
variedad de enfoques de la programacin de computadoras,
la variedad histrica de las lenguas, y los mecanismos bsicos de
compiladores e intrpretes.
Generaciones de idiomas
Para entender la asombrosa variedad de lenguas, programas y productos
informticos que colectivamente
se refieren a como de software, ayuda a recordar la historia de esta
joven disciplina.
Cada equipo est cableado para llevar a cabo determinadas operaciones en
respuesta a las instrucciones. Una instruccin es un patrn
de unos y ceros almacenados en una palabra de la memoria de la
computadora. Por cierto, una "palabra" de la memoria es la unidad bsica
de
almacenamiento de un computadora. A 16 bits tiene un tamao de palabra
de 16 bits, o dos bytes. 32-Un equipo tiene poco
un tamao de palabra de 32 bits, o cuatro bytes. Un equipo de 64 bits
tiene un tamao de palabra de 64 bits, u ocho bytes. Cuando un equipo
accede a la memoria, por lo general almacena o recupera una palabra de
informacin a la vez.
Si uno espera en una ubicacin particular de memoria, una no puede decir
si el patrn de unos y ceros en
ese lugar fue una instruccin o un pedazo de los datos (nmero). Cuando
el equipo lee una ubicacin de memoria
esperando encontrar all una instruccin, que interpreta cualquier
patrn de bits se encuentra en ese lugar como una instruccin.
Si el bit es un patrn correctamente formado instruccin de la mquina,
el computadora realiza la operacin;
de otro modo, la mquina se detiene con una instruccin ilegal culpa.
Cada equipo est cableada para interpretar un conjunto finito de
instrucciones. La mayora de las mquinas hoy en da tienen de 75 a
150 instrucciones en la mquina "conjunto de instrucciones." Gran parte
de la "arquitectura" de un equipo de diseo es
se refleja en el conjunto de instrucciones, y establece las
instrucciones para diferentes arquitecturas son diferentes. Por ejemplo,
el conjunto de instrucciones para el Intel Pentium equipo es diferente
del conjunto de instrucciones para la Sun SPARC.
Incluso si las distintas arquitecturas tienen instrucciones que hacen la
misma cosa, como cambio de todos los bits en una computadora
palabra izquierda un lugar, el patrn de unos y ceros en la instruccin
palabra ser diferente en diferentes
arquitecturas. Por supuesto, diferentes arquitecturas por lo general
tambin tienen algunas instrucciones que son nicas para que
equipo de diseo.
Los primeros computadoraes, y el primer hobby computadoras, se
programaron directamente en la mquina
conjunto de instrucciones. El programador trabajado con unos y ceros
para codificar cada instruccin. Como un ejemplo,

aqu est el cdigo (y una explicacin de cada instruccin), para un 16bits. Estos tres
instrucciones que aadir el valor almacenado en la memoria la ubicacin
64 a que en la ubicacin 65, y almacenar el resultado
en la ubicacin 66.
0110000001000000 (de carga de la A-registro de 64)
0100000001000001 (Aadir el contenido de 65)
0111000001000010 (Almacn de la A-registro en el 66)
Una vez que el programador cre todas las instrucciones de la mquina,
probablemente escrito por el poco las pautas sobre el papel,
el programador de almacenar las instrucciones en la memoria utilizando
interruptores en el panel frontal del equipo.
A continuacin, el programador que configurar el registro de P (programa
contra el registro) el contenido a la ubicacin de la primera
instruccin en el programa y, a continuacin, pulse "Ejecutar". El bucle
operacionales bsicos de la computadora es leer
la instruccin almacenados en la ubicacin de memoria apuntado por el
registro P, incrementar el registro P, ejecute el
instruccin que se encuentra en la memoria, y repetir.
Una de las primeras mejoras en la programacin de la productividad fue
la ensamblador. Un ensamblador puede leer mnemotcnicos
(letras y nmeros) para instrucciones de la mquina, y para cada
mnemotcnico generar el lenguaje de mquina
en unos y ceros.
Asamblea lenguas se denominan de segunda generacin idiomas. Con la
programacin en lenguaje ensamblador, el
programador puede trabajar en el mundo de letras y palabras en lugar de
unos y ceros. Los programadores escribir su cdigo
utilizando los cdigos de mnemotc que se traducen directamente en la
mquina las instrucciones. Estos son tpicos de esa mnemotcnicos:
LDA m de carga de la A-registro de la ubicacin de memoria m.
ADA m Aadir el contenido de la memoria m para el contenido de la Aregistro, y dejar
la suma en la A-registro.
ALS A la izquierda Mays; cambio de los bits en el registro A-1 bit
izquierda, y la menos importante poco cero.
Saltar la SSA en seal de una, si la ms importante de bits en la Aregistro es de 1, pase la prxima
instruccin, de lo contrario, ejecutar la siguiente instruccin.
JMP m Ir a la direccin de m para la siguiente instruccin.
La labor de un montador es directa; traducir el mnemotcnico "opcdigos" en la correspondiente mquina
instrucciones.
Aqu est el cdigo en lenguaje ensamblador para el programa anterior
que aade dos nmeros y almacena el resultado en
tercera ubicacin:
LDA 100 / / carga de la A-registro de 100 octal = 64
ADA 101 / / Aadir a la A-reg el contenido de 101 (65)
STA 102 / / Almacenar el registro A-contenidos en 102 (66)
Casi nadie los cdigos directamente en los unos y ceros del lenguaje de
mquina ms. Sin embargo, los programadores
suelen utilizar el lenguaje ensamblador para los programas que son muy

ntimas con los detalles de hardware de la computadora, o


para los programas que deben ser optimizadas para la velocidad y los
pequeos requisitos de memoria. Como una herramienta educativa, el
montaje
lenguaje de programacin es muy importante, demasiado. Es probablemente
la mejor manera de ganar un sentir intuitivo de lo que las computadoras
realmente hacemos y cmo lo hacen.
En 1954 el mundo vio la primera de tercera generacin idioma. El idioma
fue FORTRAN, concebido por John
Backus de IBM. FORTRAN est a favor de Frmula traduccin. El objetivo
era proporcionar a los programadores con
una forma de trabajo a un nivel ms alto de abstraccin. En lugar de
limitarse a la instruccin de un particular
mquina, el programador trabaj con las declaraciones que pareca algo
as como Ingls y matemticas declaraciones.
El texto tambin incluye la construccin de ramificacin condicional, la
reproduccin en bucle, y I / O (entrada y salida).
Aqu est la declaracin de FORTRAN que aadir dos nmeros y almacenar
el resultado en un tercer lugar. El
nombres de variables X, Y, Z y convertirse en las etiquetas de las
localidades de memoria, y esta declaracin dice que para agregar el
contenido de
Y la ubicacin sobre el contenido de la ubicacin Z, y almacenar la suma
en la ubicacin X:
X = Y + Z
En comparacin con el lenguaje ensamblador, que es una ganancia muy en
writeability y la legibilidad!
FORTRAN es una "lengua de procedimiento". Lenguas de procedimiento
parece bastante natural para las personas con antecedentes
en la automatizacin y la ingeniera. El computadora es una herramienta
flexible, y el programador del trabajo es establecer las
secuencia de las medidas necesarias para cumplir la tarea. El programa
es como una receta que el equipo seguir
mecnicamente.
Lenguas de procedimiento constituyen una categora de "imprescindible
idiomas," porque las declaraciones de la lengua
son imperativos para el equipo-los pasos del programa de especificar
cada una de las acciones del equipo. Los otros
categora de idiomas es imprescindible "orientado a objetos" lenguas,
que se discutir con ms detalle ms adelante.
La mayora de los programas hoy en da estn escritas en idiomas
imprescindible, pero no todos ...
En 1958, John McCarthy en el MIT desarroll un tipo muy diferente de la
lengua. Este lenguaje fue LISP (por
LISTA Procesamiento), y se basa en funciones matemticas. Es un buen
idioma para trabajar
con listas de nmeros, palabras y objetos, y que ha sido ampliamente
utilizada en la inteligencia artificial (AI) de trabajo.
En matemticas, una funcin tiene argumentos y devuelve un valor. LISP
obras de la misma manera, y es LISP
llamado un "lenguaje funcional" como consecuencia de ello. Aqu est el
cdigo LISP que aadir dos nmeros y devolver la suma:
(+ 2 5)
Este cdigo dice que la funcin es otra, y los dos nmeros a aadir son

2 y 5. El procesador de lenguaje LISP


devolver el nmero 7 como resultado de ello. Funcional lenguas son
tambin llamados "idiomas declarativo", porque la
funciones se declaran, y la ejecucin del programa es simplemente la
evaluacin de las funciones. Vamos a volver
funcional a los idiomas ms tarde.
En 1959 un consorcio de seis fabricantes de computadoraes y tres
organismos de gobierno de los EE.UU. en libertad como Cobol
el lenguaje de computacin para aplicaciones de negocio (comercial y de
negocios orientados a Language). Cobol, al igual que
FORTRAN, es un imperativo, lengua de procedimiento. Para hacer el cdigo
ms auto-documentacin, fue diseado Cobol
a ser un notable "verboso" idioma. La siguiente lnea aade dos nmeros
y almacena el resultado en una tercera variable:
Y aadir, dando X. Z
Muchos de los estudiantes en ciencias de la computacin hoy en da
respecto Cobol como la vieja tecnologa, pero incluso hoy en da hay ms
lneas
de la produccin de cdigo de uso diario escrito en Cobol que en
cualquier otro idioma (http://archive.adaic.com/docs/
informes / lawlis / content.htm).
Ambos PL / 1 y BASIC se introdujeron en 1964. Estos tambin son de
procedimiento, imprescindible idiomas. IBM
diseado PL / 1 con el plan de "unificador" cientficos y comerciales de
programacin. PL / 1 fue parte de la IBM
360 proyectos, y PL / 1 fue la intencin de suplantar tanto FORTRAN y
COBOL, y convertirse en una lengua
programadores en lo sucesivo el uso de todos los proyectos (Pugh, E.,
Johnson, L., & Palmer, J. IBM 's 360 y la primera
370 Sistemas. Cambridge, MA: MIT Press, 1991). Huelga decir que la
estrategia de IBM no para convencer a todos los
FORTRAN y COBOL programadores.
BSICA fue diseado en Dartmouth por los profesores Kemeny y Kurtz como
un lenguaje sencillo para los principiantes.
BASE est a favor de principiante Todos los fines Cdigo de Instruccin
Simblica. Originalmente BSICA realmente era simple, demasiado
simple, de hecho, para su uso en produccin, sino que haba unos tipos
de datos y drsticas restricciones a la longitud de los nombres de
variables,
por ejemplo. Con el tiempo, sin embargo, casi un sinnmero de
variaciones de BASIC se han creado, y
algunos son muy ricos en la programacin de potencia. De Microsoft
Visual Basic, por ejemplo, es un poderoso lenguaje rico
en caractersticas modernas.
Dennis Ritchie cre la gran influencia de tercera generacin lenguaje C
en 1971. C fue desarrollado como un idioma
con el que para escribir el sistema operativo Unix, y la popularidad de
Unix y C aument juntos. C es tambin un
lenguaje de programacin imperativo. Una parte importante de la
apelacin de C es su capacidad para llevar a cabo bajo nivel de las
manipulaciones,
tales como las manipulaciones de cada uno de los bits, de un lenguaje de
alto nivel. Cdigo C es tambin extraordinariamente dcil
a la optimizacin de rendimiento. Incluso despus de 34 aos, C es el

cuello y el cuello con el mucho ms reciente de Java como el ms


lenguaje popular para los nuevos trabajos
(http://www.tiobe.com/tpci.htm).
Durante el decenio de 1970, el lenguaje Smalltalk populariz las ideas
de programacin orientada a objetos. Objectoriented
los idiomas son otra subcategora de idiomas imperativas. Tanto de
procedimiento como orientado a objetos
los idiomas son imprescindibles los idiomas. La diferencia es que los
lenguajes orientados a objetos de apoyo orientado a objetos
prcticas de programacin, tales como la herencia, encapsulacin y
polimorfismo. Vamos a describir estas ideas en
ms detalle ms adelante. El objetivo de estas prcticas es crear ms
robusta y reutilizable mdulos de cdigo, y por lo tanto,
mejorar la productividad de programacin.
A mediados del decenio de 1980, Bjarne Stroustrup, en la Universidad de
Cambridge en Gran Bretaa, invent una orientada a objetos
llamado lenguaje C + +. C + + es un superconjunto de C; cualquier
programa C es tambin un C + + programa. C + + proporciona un conjunto
completo de
orientado a objetos caractersticas, y en un tiempo se llam "C con
clases". Hasta Java surgi en el decenio de 1990, C + +
era el ms popular orientado a objetos lenguaje de desarrollo.
El ms popular orientado a objetos es hoy la lengua de Java, que fue
creado por James Gosling y su
colegas en Sun Microsystems. Java fue liberado por Sun en 1994, y se
convirti en un xito inmediato debido a su
idoneidad para aplicaciones web, la riqueza de su lenguaje biblioteca, y
su independencia de hardware. Java en el crecimiento
uso entre los programadores ha sido sin precedentes para un nuevo
idioma. Hoy en da Java y C son los idiomas ms
frecuentemente elegido para los nuevos trabajos
(http://www.tiobe.com/tpci.htm).
La variedad de tercera generacin idiomas hoy en da es muy grande.
Algunos tienen ms xito que otros
porque ofrecen inusual poder expresivo (C, Java), la eficiencia de la
ejecucin (C, FORTRAN), un gran instalado
base de cdigo (Cobol), familiaridad (BASIC), la portabilidad entre
computadoraes (Java), objeto de orientacin (Java,
C + +), o el respaldo de importantes patrocinadores (como los EE.UU.
Departamento de Defensa de patrocinio de ADA).
Compiladores e intrpretes
Con el desarrollo de FORTRAN lleg un nuevo y ms complejo programa para
la creacin de lenguaje de mquina
de un alto nivel de expresin de una intencin del programador. El nuevo
programa se llama un compilador, y el trabajo
de un compilador es traducir a un alto nivel de lenguaje de programacin
en cdigo de mquina.
La entrada a un compilador es el cdigo fuente escrito por el
programador en el lenguaje de alto nivel. Nosotros
muestran un simple programa de ejemplo de un libro seminal en las
estadsticas titulado Anlisis multivariado de datos, por escrito
por William Cooley y Paul Lohnes en 1971. El libro fue notable en su
momento para su inclusin de muchos
FORTRAN programas en forma de cdigo fuente.
En 1971 la aportacin habra sido partir de tarjetas perforadas, y la
salida habra sido una impresora. En el

leer a continuacin las declaraciones que han sustituido el dispositivo


lector de tarjeta ID de 7 con el carcter asterisco para permitir la
programa para leer desde el teclado de la PC. Asimismo, en el escribir
declaraciones, que han sustituido a la impresora
ID de dispositivo 6 con un asterisco. Esto permite la salida para ir a
la pantalla de computadora.
FORTRAN de ese momento fue una columna orientada hacia la lengua
(FORTRAN nuevas normas han permitido que el "libre
formato "declaraciones). Declaracin de los nmeros aparecieron en las
columnas 1-5, y las declaraciones fueron escritas en las columnas
7-72. Poner un nmero en la columna 6 significaba que la lnea era una
continuacin de la lnea anterior. Poner una C en
la columna 1 significa que la lnea fue un comentario, no un programa de
declaracin.
Variables que comienza con las letras I, J, K, L, M, N o se enteros, y
todos los dems estaban en coma flotante (caracteres
podra leer entero en las variables de tipo).
Si usted est interesado en probar este programa, un compilador gratuito
FORTRAN, llamado GNU FORTRAN Grupo de los 77, es
disponible a partir de la Free Software Foundation. Usted puede
encontrar el enlace de descarga http://kkourakis.tripod.com/ en.
El siguiente programa de Cooley Lohnes y fue utilizada para calcular el
promedio de las puntuaciones de cada uno de varias pruebas
para cada estudiante en un estudio.
PROGRAMA CLAVG
C
C calcular promedio de las puntuaciones de M para cada uno de los temas
N
C ENTRADA:
C primera tarjeta contiene en columnas N 1-5, M y cols en 6-10
C siguientes tarjetas son tarjetas de puntuacin, un juego por tema.
C primera tarjeta por juego contiene ID cols en 1-5 y hasta
C 25 puntuaciones en 3-COLUMNA DE CAMPOS. ID campo puede ser
C en blanco en las tarjetas adicionales en un conjunto
Cooley C, W & Lohnes, P, ANLISIS DE DATOS MULTIVARIABLE, 1971
C
DIMENSIN X (1000)
READ (*, 1) N, M
FORMATO 1 (2I5)
ESCRIBIR (*, 2) M, N
FORMATO 2 ( "los promedios en ', I6,' PRUEBAS PARA CADA UNO DE ', I6,
1 'MATERIAS ")
EM = M
DO5J=1,N
READ(*,3)ID,(X(K),K=1,M)
3FORMAT(I5,25F3.0/(5X,25F3.0))
SUM=0.0
DO4K=1,M
4SUM=SUM+X(K)
AV=SUM/EM
5WRITE(*,6)J,ID,AV
6FORMAT(I6,3X,'SUBJECT',I6,3X,'AV=',F9.2)
STOP
END
Exampleinputcards:
55

82137947
81214332
81332311
82479999
82569885

Este programa se inicia por la reserva de un conjunto de 1000 elementos


de nmeros reales. Luego, lee la primera lnea de
de entrada para obtener los valores de M y N, el nmero de estudiantes y
el nmero de partituras para cada estudiante. A continuacin, se escribe
un mensaje que resume la tarea que tenemos por delante.
El bucle principal se inicia el prximo en la palabra clave DO. El bucle
se inicia y termina all, en la declaracin numerada 5.
La labor del bucle comienza con la lectura de otra lnea de entrada, que
el programa espera que constar de un estudiante
identificador y cinco puntuaciones de las pruebas. En el interior del
bucle principal, hay un pequeo bucle que comienza en la prxima DO y
sigue slo a la lnea siguiente, con el nmero 4. El bucle interior
sumas todos los puntajes para que la lnea de entrada. El
ltimo trabajo de la bucle principal es dividir la suma de las
puntuaciones de las pruebas para el estudiante por el nmero de pruebas
con el fin de
calcular una puntuacin media para ese estudiante. Despus de escribir
el resultado para que el alumno, el ciclo se reanuda con el siguiente
estudiante, hasta que los puntajes de todos los alumnos han sido en
promedio.
Obviamente, la traduccin de Ingls-tales como matemticas o las
declaraciones en cdigo de mquina es mucho ms difcil
que el trabajo realizado por un ensamblador. Compiladores proceso de
cdigo fuente en una serie de pasos.
El primer paso se llama "exploracin" o "anlisis lxico", y la salida
es una corriente de fichas. Tokens son la
palabras de la lengua, y "leer", "formato", "AV", "4", y "3X" son todas
las fichas en el programa de ejemplo.
A continuacin, el compilador "analiza" el modo stream. Este paso
tambin se denomina "anlisis de sintaxis." Refirindose a la
"gramtica"
o las normas de la lengua, el compilador utiliza un "rbol de analizar"
para comprobar que las declaraciones en el cdigo fuente comprenden
declaraciones jurdicas en la lengua. Es en este paso que el compilador
devolver los mensajes de error si una coma que falta,
por ejemplo, o una palabra clave est mal. Ms adelante en este captulo
vamos a volver a los temas de anlisis y analizar los rboles.
Si todas las declaraciones son declaraciones jurdicas, el compilador
con el producto "anlisis semntico". En esta fase,
el sentido de las declaraciones que se crea. En sentido, nos referimos a
la aplicacin de la intencin del programador en
cdigo ejecutable. Compiladores modernos a menudo crear un programa en
un lenguaje intermedio que es convertida ms tarde
en cdigo de mquina, pero principios de los compiladores, ya sea creado
el lenguaje ensamblador cdigo que luego fue montado por el
fiel ensamblador, o creados lenguaje de mquina directamente. La ventaja
del enfoque moderno es que los compiladores
para los diferentes idiomas puede crear cdigo intermedio en la forma

comn, el cdigo intermedio que puede ser alimentado


a un generador de lenguaje de mquina.
El resultado de la compilacin de un programa es un archivo de cdigo
objeto, que es el archivo binario de mquina las instrucciones que
se ejecutar cuando el programa se ejecute. Compiladores crear un tipo
especial de cdigo objeto llamado cdigo reubicable,
que es cdigo objeto que pueda ser cargado en cualquier parte de la
memoria. Cuando el programa se carga en la memoria para ejecutar,
direcciones y referencias en los archivos de reubicable se ajustan para
reflejar la ubicacin real del programa en la memoria.
Con los compiladores, la traduccin del cdigo fuente a cdigo
ejecutable una vez que se logra. Una vez que el programa es
compilado, ejecutando el programa no requiere traduccin, y el programa
en forma de cdigo mquina se ejecuta con rapidez.
Los intrpretes actan diferente. Los intrpretes traducen el cdigo
fuente a cdigo de mquina, una lnea de cdigo fuente
a la vez, y lo hacen cada vez que el programa se ejecuta. El intrprete
est siempre en el programa de control, es
el intrprete que es cuando realmente la ejecucin de un programa en un
lenguaje interpretado se ejecuta. BASIC es un lenguaje
que suele ser aplicado con un intrprete.
En general, un programa ejecutado por un intrprete se ejecutarn ms
lentamente que un programa que es la primera compilado
en cdigo objeto. La razn, por supuesto, es que el intrprete debe
analizar cada lnea y cada lnea de convertir a
cdigo de mquina, cada vez que el programa se ejecuta.
Por otro lado, los intrpretes tienen otras ventajas compensar, en
algunas situaciones. Por ejemplo, cuando
los estudiantes estn aprendiendo a programa, la interactividad de un
intrprete, y el ahorro de tiempo en la recompilacin
programas de largo, puede ser ms importante que la velocidad de
ejecucin final. Los intrpretes pueden a menudo proporcionar un mejor
diagnstico
mensajes, tambin, ya que trabajan directamente desde el cdigo fuente,
lnea por lnea. Adems, con la continuacin de
los aumentos de velocidades de cmputo de hardware, velocidad de
ejecucin a veces se vuelve menos importante para los usuarios que
otras caractersticas de una lengua.
Las distinciones son a veces "borroso". En primer lugar, algunos idiomas
se aplican tanto interpretarse como
y lenguajes compilados (por ejemplo, BASIC, PERL, LISP). El moderno
lenguaje Java tambin desdibuja compilador / intrprete
fronteras, como vamos a discutir ahora.
Las mquinas virtuales
Java es compilado e interpretado. El compilador de Java (javac) traduce
el cdigo fuente de Java en Java
"Bytecode", que es una plataforma independiente de cdigo intermedio.
Cuando el programa Java (Java) se ejecuta, el Java
Virtual Machine (JVM) interpreta el bytecode de Java.
Una mquina virtual como Java JVM es un equipo definido por software y
no hardware. Un virtual
mquina ejecuta programas como un verdadero equipo, pero la mquina
virtual es en realidad otro programa, en una construccin
software, que obtiene, decodifica y ejecuta las instrucciones del
programa. Las instrucciones se refieren a bytecode.
En el caso de Java, la JVM ejecuta una mquina descrita por el

funcionario de la especificacin JVM


Lindholm y Yellin, que puede ver en el sitio web de Sun Microsystems:
http://java.sun.com/docs/
libros / vmspec /.
La Mquina virtual de Java es la piedra angular de la Java y Java 2
plataformas. Es el componente de la tecnologa
responsable de su hardware y sistema operativo independencia, el pequeo
tamao de su cdigo compilado, y de su capacidad
para proteger a los usuarios de programas maliciosos.
El Java Virtual Machine es una mquina abstracta de computacin. Al
igual que una verdadera mquina de computacin, tiene una instruccin
establecer y manipula diversas reas de memoria en tiempo de ejecucin.
Java es compilado e interpretado, el cdigo fuente es compilado en
bytecode, y el bytecode es
interpretado por la JVM. Adems, muchos de los actuales implementaciones
de la JVM oferta justo a tiempo de compilacin
(JITC), lo que significa que cuando el programa se ejecuta primero, en
realidad la JVM compila el bytecode en
instrucciones mquina. De ahora en adelante, la ejecucin del programa
se ejecuta un programa compilado en forma de cdigo objeto. El
objetivo de este diseo es proporcionar a las ventajas de ambos
compiladores e intrpretes.
Por cierto, el trmino mquina virtual, en general, se describe una capa
adicional de abstraccin entre
el usuario y el hardware, y cientficos a fin de utilizar tambin el
trmino para describir el software que hace que una
tipo de equipo parece ser otro. Por ejemplo, el Digital Equipment
Corporation VAX lnea de productos,
SLB ejecutando el sistema operativo, era muy popular en los aos 1980 y
1990, y muchos programas se
escrito para que el medio ambiente. Dado que los computadoraes ya no
estn disponibles, algunas personas instalar mquinas virtuales
(software) para Linux (http://www.wherry.com/gadgets/retrocomputing/vaxsimh.html) o las computadoras de Windows
(http://www.dynawell.com/charon-vax/) ejecutar programas de VAX y
parecen estar VAX / VMS computadoraes.
Otro uso del trmino mquina virtual que es por IBM, cuyo sistema
operativo VM proporciona a cada usuario
la ilusin de tener una mquina IBM 370 para su uso personal.
PROCEDIMIENTO DE PROGRAMACIN
Para muchos de los nuevos programadores, de procedimiento de
programacin es el paradigma natural. Un programa puede ser a menudo
concebido simplemente como una lista de instrucciones para ser
ejecutadas en orden, es decir, un procedimiento que debe seguirse por el
computadora. Procedimiento lenguajes de programacin son llamados
tambin imprescindible idiomas.
En el procedimiento de programacin, el cdigo para un trabajo
especfico est contenida en un llamado procedimiento. Otro nombre
de un procedimiento es a menudo subrutina. Por ejemplo, uno podra crear
un procedimiento para encontrar la desviacin estndar de
una matriz de nmeros.
La desviacin tpica de una medida se define como la raz cuadrada de la

media al cuadrado de la desviacin


significar. Aqu es la desviacin estndar de la poblacin, y es la
media de poblacin:

(4,1)
Si uno est trabajando a partir de una muestra y con la intencin de
inferir la desviacin estndar de la poblacin mayor, la
mejor estimacin se obtiene dividiendo la suma de las desviaciones por
(n-1) en lugar de n. Aqu s es el estndar de la muestra
desviacin, y es la media de la muestra:

(4,2)
Una frmula equivalente a menudo til para el clculo es el siguiente:

(4,3)

Para escribir un procedimiento para llevar a cabo este clculo, uno


podra escribir un programa para hacer lo siguiente:

Esta es la receta, el procedimiento, el pseudocdigo, para el clculo de la


desviacin
estndar
de
una
serie
de
nmeros. Aqu hay una clase llamada Java Sd que se aplica este procedimiento en
una rutina llamada stdDev:

La ejecucin comienza en principal. El programa principal crea un


conjunto de cuatro nmeros de punto flotante y, a continuacin,
imprime la cadena de caracteres "Std. dev. =", seguido por el nmero de
regresar de la rutina cuando stdDev
stdDev se pasa la serie de cuatro nmeros. El cdigo sigue en stdDev
nuestro pseudocdigo anterior, utilizando una de
bucle para iterar a travs de todos los nmeros en la matriz de que el
principal pas a stdDev.
Java fue diseado para ser un objeto orientado a la lengua, y el objeto
proporciona orientacin an ms sofisticado
formas de crear mdulos de cdigo de un lenguaje estrictamente de
procedimiento como FORTRAN ofrece. Sin embargo, una
procedimiento puede programar en Java, como hemos hecho anteriormente.
Procedimiento de programacin estndar de captura de soluciones a
problemas computacionales en bloques de cdigo que
se puede acceder por nombre, que son reutilizables por medio de una
serie de insumos (los argumentos-las variables
pas a la rutina), y que devuelven un conjunto estndar de los
productos. Aviso, tambin, que las variables han procedimiento
"Alcance"; variables que son declaradas dentro del procedimiento, al
igual que suma y sumSquares, y slo son visibles
en el procedimiento. Esto ayuda a evitar la confusin con respecto a las
variables que se utilizan y, por tanto, se suma a programa
fiabilidad.
Una vez que haya una rutina que calcula la desviacin estndar de una
serie de nmeros, que pueden ser de rutina
utilizado una y otra vez. Esa reutilizacin se puede lograr mediante la
inclusin de la rutina, en cualquiera de un nuevo programa
escribe, o por la adicin de la rutina a una biblioteca donde otros
programas pueden tener acceso al procedimiento por su nombre.
Esta estructuracin del cdigo es un paso gigantesco ms all de la
programacin no estructurada, donde la totalidad del programa, sea cual
sea
es, se compone de un nico bloque monoltico de cdigo. Con el cdigo no
estructurado, de ramificacin y el uso repetitivo de cdigo
se realizan utilizando condicionales y GOTO o saltar declaraciones. El
resultado puede ser que los programas de

son difciles de leer, propenso a errores, y difcil de depurar-"cdigo


de espagueti".
De programacin estructurado divide la tarea de programacin modular en
los procedimientos. Este importante avance
en el diseo de programas mejora la legibilidad del programa, la
fiabilidad, y la reutilizacin. La mayor tarea est roto
abajo en una serie de subprocedures. El subprocedures se definen (por
escrito), y la programacin estructurada
tarea se convierte entonces en una de llamar a la bien probada
subprocedures en el orden apropiado.
DE PROGRAMACIN ORIENTADO A OBJETOS
Orientado a objetos (OO) es una programacin de ms reciente desarrollo
que permite que los enfoques ms
adelantado la fiabilidad del software y la reutilizacin, y que a menudo
permitir que el software para "encajar" mejor con nuestra comprensin
del mundo real que nuestros programas se puede reaccionar, o tratando de
controlar.
En lugar de los procedimientos, la programacin OO se basa en el
software de objetos como las unidades de la modularidad. Una persona
objeto es una instancia de un tipo o "clase". Uno crea una instancia
mediante el uso de las especificaciones de la clase.
Como una analoga, mi coche es una instancia de la clase de automvilesque tiene cuatro ruedas, un motor, asientos, etc, al igual que todos
coches, pero mi coche es un coche especfico entre los muchos
automviles en el mundo.
Un ejemplo de una clase tiene su propio "estado", o los valores de sus
caractersticas. Mi coche es de color rojo; su coche es azul;
ambos son los automviles. Mi auto tiene 170 hp; tuyo tiene 200 hp. Mi
coche no se est moviendo en este momento, su coche es
viaja a 34 mph. La clase de automviles se especifica que todos los
automviles tienen color, el caballo de fuerza, y la velocidad
(entre otras cosas) como atributos o variables de instancia.
Los objetos tambin tienen comportamiento. Comportamiento est
determinado por los procedimientos de la clase, y estos procedimientos
se
mtodos de llamada. Un automvil de clase tendr la aplicacin de
mtodos tales como changeSpeed (para acelerar o desacelerar),
parque, de repostaje y, a su vez. Habida cuenta de una instancia de la
clase de automviles, un programa podra invocar la
changeSpeed mtodo, por ejemplo, a causa de que coche particular para ir
ms rpido. El mtodo es changeSpeed
llamado un mtodo de instancia, porque afecta a una instancia de la
clase de automviles (un automvil particular).
Hacer que el software objeto de la unidad de modularidad tiene algunas
ventajas importantes. En primer lugar, la programacin OO
"Encapsula" el estado y el comportamiento de los objetos. Programas que
deseen utilizar el cdigo de un objeto que puede tener acceso a
cdigo nico a travs de variables de instancia y mtodos de instancia
pblica. Cuando un programa invoca la
changeSpeed mtodo de un automvil, invocando el programa no tiene la
visibilidad de la forma en que el cambio se efecta.
Esto evita que los programadores de tomar ventaja de los detalles de la
aplicacin.
Puede sonar como una desventaja para impedir que los programadores de

tomar ventaja del conocimiento de la aplicacin


detalles. Sin embargo, a lo largo de muchos aos, los programadores han
aprendido que "las cosas cambian." Cuando uno tiene
ventaja particular de algunos detalles de aplicacin, se corre el riesgo
de tener un programa de fallar cuando la clase es
actualizado. Por lo tanto, en la programacin OO, el "contrato" entre la
clase y el usuario est totalmente en el pliego de
de la interfaz, es decir, el mtodo y los parmetros de los valores de
retorno. Incluso si el creador de la clase decide
hacer un cambio interno, la interfaz seguir siendo eficaz. Esta
encapsulacin significa un funcionamiento fiable,
incluso como "las cosas cambian".
Otra gran idea apoyada por los lenguajes de programacin OO es la
herencia gentica. Muchas veces una nueva
esfuerzo de programacin, es decir, "el mismo que el ltimo esfuerzo,
pero diferentes ..." Cuando ese es el caso, es til para tomar
ventaja de la anterior cdigo mediante la creacin de una nueva clase
que hereda de la vieja, y simplemente aade las nuevas caractersticas.
Por ejemplo, si un programa requiere una limusina objeto, la limusina de
clase puede ser concebido como una subclase
de automvil. Una limusina podra tener ms variables de instancia, o
atributos, en relacin con los costos, sobre las bebidas
bordo, calendario, etc En caso contrario, la limusina clase podra
aprovechar el color, el caballo de fuerza, y la velocidad
atributos ya definidos para los automviles. Una limusina tambin podra
compartir el comportamiento de los automviles a travs de la
changeSpeed, parque, y otros mtodos ya definidos.
Al describir la herencia, el equipo cientficos dicen que la relacin
entre una subclase y un superior
clase constituye un "es-una" relacin. La subclase es tambin una
instancia de la clase superior. La limusina es
tambin un automvil.
La herencia permite una clase para sacar provecho de los atributos y el
comportamiento de otro. A menudo el diseo de
un proyecto de programacin OO se centra en gran parte de la jerarqua
de las clases (el conjunto de clases para ser escrito), y
las relaciones a travs de la herencia de las clases el uno al otro. Un
bien definida jerarqua de clase puede
aumentar la reutilizacin de cdigo (disminucin el cdigo necesario), y
mejorar la fiabilidad gracias a la reduccin de la redundancia o
duplicacin.
Relacionado a la herencia es el concepto de polimorfismo. Polimorfismo
medios ", asume muchas formas".
En la programacin OO, el polimorfismo significa que la ejecucin de un
mtodo de un determinado nombre puede ser diferente
dependiendo de la clase del objeto para el que el mtodo se invoca.
Por ejemplo, supongamos que los casos de los automviles de clase y la
Berlina categora debern ser estacionados
de vez en cuando. Sin embargo, un aparcamiento Berlina podr exigir un
comportamiento diferente, en particular, una limusina
requerir mucho ms espacio de estacionamiento. Por lo tanto, el parque
() mtodo de la clase Berlina buscar una
espacio de un tamao diferente que el parque () mtodo de la clase de
automviles.

Supongamos que el vehculo objeto a veces puede ser un automvil y, a


veces, ser una limusina.
Cuando los vehculos deben ser estacionados, el programa va a invocar el
parque () sobre el mtodo de auto particular o
Berlina (por ejemplo, vehicle.park ()). El programador no tiene que
preocuparse de si un vehculo es
automvil o una limusina. Si el ejemplo es un automvil, el automvil
mtodo ser invocado, si la instancia es
una Berlina, de la Berlina mtodo se invoca. El mtodo parece ser el
mismo para ambos tipos de objeto, pero
la ejecucin vara en funcin de la clase a la que pertenece el objeto.
El parque () mtodo tiene diferentes
formas.
Polimorfismo permite a los programadores a pensar acerca de sus
programas en los medios naturales. Por ejemplo, cortadoras de csped,
automviles, barcos, camiones diesel y todos deben ser "iniciado", pero
los medios a partir de las distintas mquinas pueden ser muy diferentes.
Supongamos que cada tipo es una subclase de vehculo. En lugar de
escribir un nombre diferente procedimiento para cada actividad,
diseador de la clase simplemente ejecuta diferentes start () mtodos en
las diferentes clases, segn proceda. Entonces
el usuario de las clases, naturalmente, puede invocar el principio ()
mtodo de la cortadora de csped objeto y el inicio ()
mtodo del automvil objeto, sin confusin y sin la complejidad de la
nomenclatura. Si el objeto est
se inici una cortadora de csped, empezando puede suponer tirando de
una cuerda, si se trata de un automvil, a partir de la participacin de
inflexin
una tecla.
Variables como el color, el caballo de fuerza, y velocidad, que
comprenden elementos de la situacin de una persona
objeto, son llamadas variables de instancia. Asimismo, la aplicacin de
mtodos tales como changeSpeed () y el parque (), que afectan a
el estado de un objeto individual, se llaman mtodos de instancia. Si el
diseador se declara tales variables de instancia
y los mtodos a ser pblicas, programas y otros objetos pueden acceder a
ellos. Por otra parte, el diseador tambin puede
dar una clase de variables de instancia privada y los mtodos, tal y
privado "miembros" que la encapsulacin virtud
de la programacin OO. Privado variables y los mtodos no son visibles,
incluso fuera del objeto.
Adems de las variables de instancia y los mtodos, las clases pueden
tener variables estticas y mtodos. Considerando que
miembros de instancia (variables y mtodos) se asocian con cada uno de
los objetos, esttica miembros se asocian
con una clase como un todo. Supongamos, por ejemplo, que la clase de
automvil incluye una variable llamada
countOfCars. Cada vez que un automvil se crea, la variable se
incrementa countOfCars. El
contar, porque es una variable esttica, se asocia con la clase, no con
cualquier persona de automviles. Suponiendo
la variable countOfCars es pblica, cualquier objeto puede descubrir el
nmero de automviles creado para

ahora por la lectura del valor de Automobile.countOfCars. El punto de


notacin dice a devolver el valor de
countOfCars de la clase de automviles.
El uso ms comn de variables static es para la clase constantes. Si
usted lee el Javadoc para la
StreamTokenizer clase, por ejemplo, ver un conjunto de cuatro
constantes de clase que se declaran esttica.
Estas constantes se TT_EOF, TT_EOL, TT_NUMBER, y TT_WORD. Estas
constantes representan la posible
valores (los tipos de token) que StreamTokenizer un retorno cuando se
extrae un token (una cadena,
un nmero, o un EndOfFile / EndOfLine pabelln) de un flujo de entrada.
Otro ejemplo de Java es la clase
Color, que se define una larga lista de constantes esttica utilizada
para representar los colores ms utilizados.
Aparte de utilizar variables static de la clase constantes, por lo
general se sabia para evitar las variables estticas a menos que usted
tienen una razn especial para utilizarlos (como, por ejemplo, una
necesidad de mantener un recuento de todos los objetos creados). La
razn
es que, normalmente, muchos objetos puede modificar una variable, y con
el tiempo la probabilidad de que algunos de los nuevos clase
teniendo tales libertades crecer. Descubrir la causa de un
comportamiento inesperado en relacin con variables estticas pueden ser
difcil.
Mtodos tambin estn asociados con una clase como un todo, y son
accesibles desde cualquier objeto simplemente
haciendo referencia al nombre de clase que proporciona el mtodo. Por
ejemplo, la clase Integer de Java tiene un conjunto
de los mtodos relacionados con nmeros enteros. Uno de ellos es el
mtodo Integer.valueOf (String), que
devuelve un objeto Integer de Java cuando se aprob una cadena que
representa adecuadamente un nmero entero.
La clase de matemticas de Java proporciona muchos ms ejemplos de los
mtodos. Cualquier objeto puede tomar ventaja de
los mtodos en la clase de matemticas para calcular una funcin
trascendental, raz cuadrada, registro, etc El objetivo
utilizando la rutina, simplemente debe hacer referencia al nombre de
clase, seguida de la notacin de puntos, y el nombre de la esttica
mtodo, por ejemplo, Math.sqrt (X), volver la raz cuadrada de X.
A menos que haya una razn especial para hacerlo, tales como
proporcionar una biblioteca de funciones como la clase de matemticas,
no
es mejor prctica para evitar los mtodos estticos. La razn es la
misma que la de variables static, el cdigo compartido
ofrece ms oportunidades de que se produjeran "efectos secundarios" que
se produzca. La excepcin a esta regla es la de Java
del programa principal () mtodo. La JVM debe encontrar un mtodo public
static llamado principal en la clase que se
ejecutado.
Visual Basic. NET utiliza el trmino "compartida" en lugar de "static",
y la palabra compartida es una mejor descripcin
del concepto. El trmino esttica se ha utilizado en varias maneras en

diferentes lenguajes de programacin. Por ejemplo,


una variable en un procedimiento C (C es una lengua de procedimiento, no
un lenguaje OO) es una cuya direccin no
no cambio entre las ejecuciones del procedimiento. Si bien otras
variables en el procedimiento de obtener y empujado hacia
popped fuera de la pila de forma dinmica, una variable en C se asignan
a una ubicacin de memoria fija, por lo que el
direccin asociada con el nombre de la variable sigue siendo estable.
Variables static en C se utilizan para cosas como contadores,
cuando uno debe realizar un seguimiento del nmero de veces que un
procedimiento se ha ejecutado. Una variable permitir
la cuenta a persistir entre las llamadas al procedimiento.
Para la programacin OO, y especficamente para Java, pensar de los
miembros estticos como miembros compartidos. Esttico miembros
son accesibles a todos. Entender cmo se diferencian de los miembros de
ejemplo, el uso esttico y slo cuando los miembros
satisfacen una necesidad que un miembro correspondiente instancia no
puede.
Lenguajes de scripting
Hoy en da existe un amplio conjunto de lenguajes de programacin a que
se refiere colectivamente como lenguajes de scripting.
La idea original de un "script" es un conjunto de comandos del sistema
operativo en un archivo. Cuando un usuario se "ejecuta"
el archivo de comandos, el conjunto de comandos en el archivo se ejecuta
en orden. Esta nocin de una secuencia de comandos sigue siendo muy
utilizados.
Secuencias de comandos son muy tiles para automatizar las tareas
rutinarias que de otro modo requieren de una persona a sentarse en un
teclado
y el mismo tipo de comandos una y otra vez.
Aqu est un ejemplo de la experiencia del autor. Este script es para un
equipo Unix. El script se ejecuta una clasificacin
un programa contra el archivo de salida para un proyecto del estudiante
y, a continuacin, ejecuta el estudiante original de un programa contra
la menor
"Extraer" el archivo como una segunda prueba y, por ltimo, se imprime
una serie de documentos para el estudiante. El script automatiza la
ejecucin de un conjunto de comandos mediante la aceptacin de un
conjunto de parmetros en la lnea de comandos y, a continuacin,
utilizando los valores
de las variables para construir los comandos adecuados y ejecutarlos.
Cuando se utiliza la secuencia de comandos, el usuario
tipos "gradeP", seguida por seis cadenas de caracteres con el nombre del
estudiante del archivo de salida, los comentarios de archivo
que se crear, etc, y por ltimo el nombre del estudiante:
#! / bin / sh
# Script gradeP de clasificacin de los proyectos access_log
# Variables:
# $ 1 estudiante del archivo de salida
# $ 2 comentarios / clasificacin de archivo que se cre por
# Programa gradeProj.pl
# $ 3 estudiantes del cdigo fuente
# $ 4 access_log_extract-informe
# $ 5 camino a la gua del estudiante
# $ 6 Nombre
# Ejecute el programa de clasificacin contra el estudiante del archivo

de salida
gradeProj.pl $ 6 $ 5 $ 1 $ 5 $ 2
# Probar el estudiante del programa contra el extracto de archivo
$ 5 $ 3 / home / fac / CHR / public_html / plc / access_log_extract $ 5
$ 4
# Imprimir los resultados
nenscript -2-r $ 5 $ 2 $ 5 $ 1 $ 5 $ 3 $ 5 $ 4
Este script es una secuencia de comandos de la Bourne shell (intrprete
de comandos) para Unix, y que ejecuta una flexibilidad
conjunto de comandos que de otro modo sera necesario escribir mucho ms
y ser mucho ms propensos a los errores de
ejecucin.
La primera lnea, el comienzo con un #! (llamado el asunto), le dice a
Unix para ejecutar los comandos en el archivo
usando el programa sh, tambin conocido como el shell de Bourne. Las
lneas que comienzan con # son lneas de comentarios. El
restantes son lneas de comandos cuyos parmetros se construyen a partir
de las variables definidas por el original
argumentos de lnea de comandos.
El Bourne shell scripting idioma es uno de los muchos lenguajes de
scripting se puede clasificar como trabajo
lenguaje de control (JCL) lenguajes de scripting. Otros incluyen la C
shell (CSH), el Korn shell (ksh), Bash (Bourne
Again Shell), JCL y JES2 (de IBM para mainframes idiomas), y MS-DOS
Batch. Todos ellos son similares
en el sentido de que puede aceptar un archivo de comandos como entrada,
incorporar los valores de los parmetros disponibles en ejecucin
tiempo, y ejecutar la secuencia de comandos. Salvo en el caso de JCL y
JES2, todos ellos tienen limitada la programacin
as como los controles, e incluir las expresiones condicionales y la
capacidad de bucle y rama durante la ejecucin de la
archivo de comandos.
He aqu un ejemplo de MS-DOS Batch archivo que se copia una lista de
archivos en un directorio llamado DUPLICAT. Lneas
comienzo con dos puntos de observacin son las lneas. Las lneas que
comienzan con un solo colon son "etiquetas" a que se refiere
otros estados. Tenga en cuenta la declaracin condicional que crea el
directorio si no existe ya. Tambin
tomar nota de la estructura de bucle GOTO utilizando la declaracin con
la copia-FILES etiqueta.

Estos lenguajes de scripting JCL tienen muy limitado de programacin y


herramientas primitivas de error de manipulacin de habilidades.
Son muy tiles, especialmente para los administradores de sistemas que
necesitan rpida "una compensacin" a las solicitudes
automatizar tareas repetitivas.
La utilidad de los lenguajes de scripts inspirado muchos autores e
inventores para desarrollar nuevos idiomas con
diversas caractersticas y conveniencias. Para el procesamiento de
textos, por ejemplo, las lenguas awk, sed, Perl y son ms populares.
Perl tambin se ha convertido en popular para fines generales de
programacin, y las lenguas PHP, Ruby, Python y se
otras lenguas til para grandes aplicaciones.
En general, estos lenguajes de scripting se interpretan, por lo que la
velocidad de ejecucin no es su principal atractivo. En vez de,
lenguajes de scripting ofrecer un compacto, simplificado la sintaxis de
la velocidad que el desarrollo del programa. En muchos casos, este
escribir a tiempo pesa ms que cualquier ventaja en tiempo de ejecucin
de desventaja. Esto es especialmente cierto en el caso de una sola vez
los sistemas de tareas
como volver a un archivo de texto o la interpretacin de un sistema de
registro de actividad.
Supongamos que uno quiere imprimir una copia de un archivo, con nmeros
de lnea aadido a la parte frontal de cada lnea. Aqu la
Perl un programa llamado lineNumberFile.pl que hacer; ejecutarlo
escribiendo
> lineNumberFile.pl <fileToPrint.

Eso es slo siete lneas de cdigo, y el trabajo est hecho.


FUNCIONAL IDIOMAS
Funcional lenguas se inventaron a comienzos de la historia de la
informtica. En 1958 John McCarthy en el MIT
LISP inventado. Funcional lenguas representan la solucin informtica
como funciones matemticas. Una funcin toma
uno o ms argumentos, y devuelve un valor. Por ejemplo, una ecuacin de
una parbola es:
f = 2x2 + 5 (4.4)
Cuando un suministro de un particular valor para x, la funcin devuelve
un resultado particular:
f (3) = 2 (3) 2 + 5 = 23 (4,5)
Con un lenguaje funcional, producto de computacin mediante la
aprobacin de parmetros de entrada a una funcin que, a continuacin,
devuelve el resultado de la funcin. El valor de retorno (s) normalmente
proporciona el parmetro de entrada (s) para otro
funcin (s), y, por lo que cualquier nivel de complejidad computacional
puede ser programado.
En cualquier lenguaje funcional, algunas funciones bsicas se
construyen, y que est llamado primitivas. En estos LISP
incluir la funciones matemticas de adicin, sustraccin, multiplicacin
y divisin, por ejemplo, as como
la funcin de automviles, que devuelve el primer elemento en una lista,
y cdr, que devuelve todas, pero el primer elemento en
una lista. (Por cierto, los nombres de las funciones y cdr automvil
proceden de las siglas de dos registros utilizados por el LISP
la vieja computadora IBM 704.)
En nuestro ejemplo funcional de la lengua, vamos a utilizar Scheme, una
nueva (1975) descendiente de LISP, que ha
en particular sintaxis coherente. Una expresin en el Plan es un tomo o
una lista. Un tomo es un nmero nico, el carcter
cadena, el nombre, o funcin. Una lista es una coleccin de las
expresiones que figuran entre parntesis. Tenga en cuenta que los
elementos
de una lista pueden ser tomos o de otras listas.
Esquema de la Computacin en la evaluacin de los medios rgimen de
expresiones. En particular, para evaluar una lista, Plan de
espera que el primer elemento de la lista para ser una funcin, y los
siguientes elementos de la lista para ser argumentos para
la funcin. Dado que los elementos de la lista pueden ser las listas, la

evaluacin producto recursivamente, en primer lugar


la evaluacin de las listas en el nivel ms bajo y, a continuacin,
proceder a la evaluacin final de la funcin en el nivel superior.
Para agregar dos nmeros en el sistema, crea una lista. El primer
elemento dentro de los parntesis es la funcin '+',
y los siguientes elementos son los argumentos a la funcin. Cuando una
expresin es completa, Esquema de la
intrprete evala la funcin y devuelve el resultado. Este ciclo se
llama el REPL Leer, evaluar,
Imprimir, Loop. Aqu est el cdigo a aadir 3 y 5 juntos:
(+ 3 5)
8
Si queremos aadir ms de dos nmeros, simplemente incluir ms
parmetros a la funcin. Por ejemplo,
aadir cinco nmeros, simplemente aumentar el nmero de argumentos:
(+ 3 5 7 4 2)
21
Expresiones pueden ser evaluadas como argumentos, demasiado, por lo que
este sistema de expresin se divide la suma de 3 y 5 por
la diferencia entre el 7 y el 5:
(/ (+ 3 5) (- 7 5))
4
Otra funcin primitiva y en LISP Sistema de la funcin es list, que
tiene una serie de argumentos
y hace una lista:
(List 1 5 6)
(1 5 6)
Si tenemos el primer elemento en una lista, la funcin volver coche
que:
(Car (list 1 5 6))
1
La funcin cdr devolver todos, pero el primer elemento de la lista:
(Cdr (list 1 5 6))
(5 6)
Una lista puede incluir muchos elementos, slo un elemento, o no
elementos:
(List 8)
(8)
(list)
()
Se puede definir una nueva funcin en cualquier momento usando la
"notacin lambda." Este cdigo crea una nueva
funcin llamada "suma", que agrega dos nmeros juntos, al igual que las
construida en primitivo '+' no, pero slo para dos
argumentos:
(define sum
(lambda (n m)
(N + m)))
El nombre cantidad est asociada con una funcin que espera dos
argumentos. La funcin se completa despus de
la adicin de los argumentos m y n juntos, y el resultado de la
evaluacin de la funcin es la suma de los dos argumentos.
Nuestra funcin suma produce el mismo resultado que el construido en
funcin de "+" cuando se present con dos argumentos, pero

suma no va a aceptar un nmero arbitrario de parmetros de entrada:


> (Sum 4 3)
7
> (+ 4 3)
7
> (Sum 4 3 2)
[Repl (25)] Error: nmero incorrecto de argumentos para
# <procedure>.
Tipo (depuracin) para entrar en el depurador.
Looping en un lenguaje funcional se logra por la repeticin, es decir,
por tener la llamada a la funcin propia
repetidamente. De hecho, una de las razones para estudiar la
programacin funcional es llegar a ser cmodo utilizando la
recursividad.
Incluso los programadores utilizando el imperativo populares lenguajes
de programacin pueden tomar ventaja de la recursividad,
que pueden hacer algunas tareas de programacin ms compacta, autodocumentacin, y fiable.
Por ejemplo, supongamos que tenemos una funcin para calcular el
factorial de un entero. Una forma de escribir tal cdigo
en Java o C es la siguiente:
int factorial (int n) (
int hecho = 1;
while (n> 1) (
hecho realidad * = n;
n -;
)
hecho regresar;
)
Esta versin de la funcin factorial se inicia con el nmero aprobado en
y, a continuacin, que multiplica iterativamente
nmero por cada nmero ms pequeo hasta la funcin de sus obras hasta
llegar a 1.
Una forma diferente de escribir esta funcin en C o Java, utilizando la
recursividad, es de esta manera:
int factorial (int n) (
if (n <= 1) return 1;
return (n * factorial (n-1));
)
Si el nmero pasado en es mayor que 1, la funcin recursiva simplemente
se multiplica el nmero pasado por
el factorial de ese nmero, menos 1. La funcin factorial se llama a s
mismo varias veces hasta que el nmero de aprobados
en el 1, momento en el cual se devuelve el valor 1 a la ltima llamada,
que luego pueden regresar a sus llamadas, etc
Algunos dirn que la funcin recursiva es ms auto-descriptivo. Es sin
duda ms corto y ms fcil de escribir.

Para escribir una funcin recursiva, una primera define la "condicin de


tierra", o "caso base", en la que el
termina la recursividad. En el ejemplo de factorial, tanto 1! y 0!
return 1 por definicin, y no ms
clculo es necesario. Cuando la tierra se produce la condicin, la
funcin debe dejar que se hace llamar y
simplemente devolver el valor 1.
El factorial de un nmero mayor puede definirse como el mayor nmero de
veces el factorial de la prxima ms pequeos
entero. As pues, la funcin factorial puede ser pensado como un
proceso: multiplicar el nmero de veces el factorial de
el prximo nmero menor. El proceso contina hasta que el nmero que se
est evaluando es de 1. En ese momento, la funcin
devuelve 1, que establece el factor para el clculo de 2!, que
proporciona la respuesta factor para calcular 3!, que
proporciona la respuesta factor para calcular 4!, etc La recursividad
"relaja" proporcionar la respuesta para el factorial
del mayor nmero.
En un lenguaje funcional, todos los productos de computacin por medio
de la evaluacin de funciones. Asignacin de valores a
variables a fin de mantener el estado no est permitida, por lo que no
puede utilizar una variable como 'n' para realizar un seguimiento de
nuestros progresos
en un bucle. Looping debe ser realizada por la recursividad. Aqu hay un
rgimen de la funcin para calcular el factorial:
(definir factorial
(lambda (n)
(if (<= n 1) 1 (* n (factorial (- n 1)))
)))
Aqu vemos tambin la funcin de ejecucin condicional si. La funcin de
si en el Plan es seguido por tres
expresiones. El primero es evaluado por su verdad. Si la primera
expresin siguiente si es cierto, la segunda expresin
se evala y regres (en este caso, si n <= 1, el retorno 1). Si la
primera expresin es falsa, la tercera expresin es
evaluados y devueltos (en este caso, si n> 1, devuelva el producto de n
y el factorial de n-1).
Podemos elaborar en nuestra funcin de simple suma y ilustrar algunas
ideas ms. Aqu est una versin de
suma que tenga en una lista como argumento. De esta manera, nuestra
funcin de suma puede calcular la suma de cualquier nmero de
enteros:
(definir listSum
(lambda (n)
(cond ((null? n) 0)
((Null? (Cdr n)) (coche n))
(ms (+ (coche n) (listSum (cdr n))))
)))
La cond (condicin) es como operador en caso de mltiples-y ms si las
declaraciones en C o Java. A raz de la
cond funcin es una lista de condicin / accin pares. Cond pruebas de
la primera condicin y, si es cierto, ejecuta cond

la accin asociado. Si la primera condicin es falsa, cond controles a


la segunda condicin. Si la segunda condicin
es cierto, cond ejecuta la accin asociada con la segunda condicin. No
puede ser cualquier nmero de condiciones,
y Cond slo se ejecutar la accin asociada con la primera condicin
verdadera. Al final puede ser una condicin ms
cond que se ejecutar si ninguna otra condicin es verdad. La otra
condicin no es necesaria, sin embargo.
El listSum las pruebas de la funcin para ver si la lista que fue
aprobada es nula. Si es as, la funcin devuelve 0.
Si no es as, entonces pruebas para ver si el cdr de la lista es nula.
Que ser verdadero si la lista se compone de un nico elemento,
y en ese caso la funcin de simplemente devolver el valor del primer y
nico elemento. En caso contrario, la funcin
recursivamente aade el primer elemento de la lista a la suma de los
elementos en la parte de atrs (CDR) de la lista.
Cuando listSum evaluar, obtenemos el resultado correcto:
> (ListSum (lista 2 4 5))
11
Podemos ir un paso ms all y hacer una funcin que se comporta como el
'+' funcin, que acepta cualquier
nmero de addends. Observe que al lado de lambda, n aparece sin
parntesis. Rgimen de aceptar cualquier
nmero de parmetros, en este caso, crear una lista de los parmetros, y
pasar la lista a la funcin de dar la
lista el nombre n.
(define suma
(lambda n
(cond ((null? n) 0)
((Null? (Cdr n)) (coche n))
(Ms (+ (coche n) (listSum (cdr n))))
)))
El cdigo para la suma es similar a listSum en su comprobacin de la
longitud de n (el conjunto de parmetros en el
caso de suma), pero si el nmero de parmetros es de dos o ms, suma
listSum utiliza la funcin para calcular
la suma de los elementos 2 a n. Esto se debe a que listSum una lista de
espera como argumento, mientras que espera que suma
uno o ms argumentos que se concatenan en una nueva lista. Si se suma a
la propia llamada recursiva que pasa
(cdr n), la prxima convocatoria se suma a crear ((cdr n)), una lista de
un elemento (el elemento es otra lista,
el cdr de la lista de parmetros), y la segunda lnea de cond se
obtendr una lista en lugar de un nmero.
Nuestra versin de suma actualidad se comporta como '+' y aceptar
cualquier nmero de parmetros y devolver la suma.
> (Suma 2 4 5 6)
17
Una solucin ms elegante acepta la lista, construye una nueva
expresin, poniendo la '+' delante de la lista, y
pasa a la nueva lista a la funcin eval Plan directamente. La funcin
eval es la funcin que el Plan de s mismo
utiliza para evaluar expresiones.
(define suma

(lambda n
(cond ((null? n) 0)
(Otra cosa (eval (cons' + n)))
)))
Esta solucin introduce dos nuevos elementos del rgimen de sintaxis.
Para entender esta versin, usted necesita saber
que la comilla simple antes de la '+' Plan de paradas de la evaluacin
de la funcin '+', y en su lugar las fuerzas de Plan de
para el tratamiento de '+' como un simple carcter tomo. Adems, la
funcin de los contras crea una nueva lista aadiendo un elemento
al frente de una lista, en este caso, aadiendo el "+" al frente de la
lista de nmeros que se suman.
La programacin funcional tiene las propiedades deseables de simple
sintaxis y la semntica, y compacto cdigo.
Adems, desde una funcin no puede cambiar cualquiera de los parmetros
que le pasan, y dado que la cesin no se utiliza
programa para cambiar el estado, "efectos secundarios" (los cambios en
las variables que soportar despus de la ejecucin de cdigo) se
eliminado, con las consiguientes mejoras en la fiabilidad.
Histricamente, la programacin funcional ha encontrado defensores en
los mbitos de la inteligencia artificial y de expertos
sistemas. El popular editor Emacs est escrito en LISP, tambin, como es
el sistema de tarifa programa de bsqueda empleados por
Orbitz (http://www.paulgraham.com/icad.html).
DISEO DE IDIOMA
Equipo lenguajes de programacin se han desarrollado para que sea ms
fcil para los seres humanos para dirigir el cmputo.
En algunas veces en el pasado se pens que un solo idioma podra ser
mejor para todas las tareas de programacin.
Por ejemplo, IBM tiene previsto "unificar" cientficas y empresariales
de la programacin en la dcada de 1960 con PL1, en sustitucin de
tanto FORTRAN y COBOL. En el decenio de 1980 se hablaba de Pascal para
sustituir a todos los dems idiomas a causa de su
superior tipo de control y estructura de bloque.
A medida que el tiempo ha pasado, sin embargo, ms idiomas, no menos,
han entrado en uso, y an otras nuevas aparecen.
Creemos que esto se debe a la maduracin de la disciplina de
programacin. As como cualquier mecnico se puede llevar varios
diferentes herramientas para trabajar con una tuerca de 10 mm (apertura
de llave, caja de llave, cuervos pies llave, superficial
toma, toma profunda, etc), cualquier programador capaz de llevar el
conocimiento de varios idiomas a fin de que
puede seleccionar el mejor para una circunstancia particular.
Algunos idiomas proporcionar un mejor tiempo de ejecucin de ejecucin,
algunas de ellas extraordinariamente compacto sintaxis para una rpida
"Uno-off" de programas, algunos ofrecen caractersticas especialmente
fuerte para la manipulacin de texto, algunos para trabajar con matrices
de nmeros, etc En la evaluacin de un idioma, informtica cientficos
consideran muchas propiedades.
Desde los primeros das, la eficiencia de la ejecucin ha sido una
propiedad deseable. De hecho, se FORTRAN

ampliamente adoptado en gran parte porque ha creado el cdigo que estaba


muy cerca, tan rpido como cdigo de lenguaje ensamblador.
Sin su caracterstica eficiencia, FORTRAN que se han adoptado mucho ms
lentamente por los programadores
de la dcada de 1950 y 1960 que trabajaban en un entorno donde el costo
de funcionamiento de un programa de una cara
mltiples de la CPU segundos, el programa se consumen.
Humanos de la legibilidad es otro rasgo deseable en un idioma. Cobol
sintaxis es como "verboso", ya que se debe a que el
diseadores de Cobol quera que el cdigo por s mismo la documentacin.
Los diseadores de espera para garantizar que se Cobol
ser fcil para un ser humano a leer, independientemente de comentar el
estilo del autor.
Una lengua que sea de fcil aplicacin tiene una ventaja. El lenguaje
ADA puede servir como un ejemplo contrario.
Si bien ADA es una excelente y cuidadosamente diseado el idioma, la ADA
se ha adoptado ms lentamente que algunos
otros, en parte debido a su tamao y la complejidad inicialmente ms
difcil de aplicar, sobre todo en
computadoraes ms pequeos.
Cientficos tambin un elogio de la expresividad idioma. Esto es algo un
juicio subjetivo, pero
un ejemplo de expresividad inusual ilustrar la propiedad. Perl ofrece
el "si" condicional familiar para nosotros
en la mayora de los idiomas, y Perl tambin ofrece el "menos"
condicional, que es la de conversar "si." Habiendo tanto
formas pueden llamarse "azcar sintctico", ya que no hay ningn
requisito funcional de un idioma a tener,
pero con tanto permite una mayor expresin natural de algunas
condiciones.
Expresividad es tambin en relacin con determinados tipos de
aplicaciones. C-construido en las instalaciones para manipular
bits marca como excepcionalmente expresivo de esa manera, y hacer de
ella una especialmente buena para la escritura de la lengua de
funcionamiento
sistemas y los controladores. Matlab la matriz manipulacin sintaxis es
muy expresivo para las aplicaciones de lgebra matricial
como las estadsticas y el procesamiento de imgenes.
Otro rasgo muy deseable en una lengua es la regularidad. Regularidad
significa la coherencia de conducta, la coherencia
de aparicin, y la evitacin de casos especiales. En C, un ejemplo de
una irregularidad es el uso de la == operador booleano.
Cualquiera de los dos valores se pueden comparar usando ==, pero dos
arrays no pueden compararse utilizando ==; arrays debe compararse
elemento por elemento. == El operador no puede aplicarse de manera
general a todas las estructuras de datos. Hay casi
siempre buenas razones para la existencia de irregularidades, pero, en
igualdad de condiciones, un lenguaje ms regular es ms conveniente.
Cientficos elogios lenguas que son extensibles. Muchos idiomas permiten
hoy el escritor para definir
nuevos tipos de datos, por ejemplo. Esto no es una opcin en las
primeras versiones de FORTRAN, que entr en la escena
slo el apoyo enteros y de punto flotante tipos de datos. Idiomas
tambin puede extenderse mediante la adicin a las bibliotecas

de rutinas compartidas. Una lengua como LISP incluso permite que el


escritor de ampliar las palabras clave de la lengua por
escrito nuevas funciones.
Normalizacin es otra ventaja; un lenguaje formal con una norma alienta
a la adopcin ms general. Ada, C,
Cobol, Java, y muchos otros ahora cuentan con las normas internacionales
para las lenguas. Perl, por otra parte, no
Perl-no es cualquier Larry Wall y el Perl cargadores decidir que quieren
"todos los favoritos del Ejrcito suizo
Chainsaw "ser (http://www.perl.com/pub/a/2000/04/whatsnew.html).
Otra propiedad deseable de una mquina de la lengua es la independencia.
Java es el mejor ejemplo de un machineindependent
idioma. Habida cuenta de que una mquina virtual de Java est disponible
para la acogida de hardware, el mismo Java
cdigo fuente debe correr la misma manera en cualquier mquina. (Esta
promesa de "escribir una vez, ejecuta en cualquier lugar" ha
se cumplen hoy, pero en el da a partir de Java, el popular QUIP fue,
"Java: escribir una vez, huir.")
Por otro lado, los programadores de C usando debe tener en cuenta la
plataforma de hardware en la que el cdigo
ejecutar, ya que, por ejemplo, los tamaos de los tipos de datos varan
en diferentes mquinas. Un int variable puede ser de 16 bits de largo
en un equipo, y 32 bits de longitud en otro. El programador tratando de
escribir un programa en C para ejecutarse en mltiples
plataformas debe tener en cuenta estas diferencias de alguna manera.
Por ltimo, algunos idiomas son ms seguros que otros. Estricto control
de tipo es una caracterstica diseada para
mejorar la seguridad. Este fue uno de los alab las virtudes de Pascal,
cuando Pascal se est promoviendo en el decenio de 1980
como la respuesta a todos los problemas de programacin. Lmites de
control sobre matrices es otra caracterstica diseada para promover la
la seguridad, y las descripciones de los modelos de seguridad de Java
Java alarde de la variedad control de frontera como un anticipo ms
lenguas como el C.
Si bien todas estas propiedades puede ser deseable, no son todo lo
posible para lograr en la misma lengua. Para
ejemplo, la seguridad de estricto control de tipo probablemente reducir
algunas formas de expresividad programador
(por ejemplo, el tratamiento de caracteres como enteros, que pueden ser
utilizados para mejorar la velocidad de ejecucin en algunas
aplicaciones),
programa de aumento de tamao, y quizs en ltima instancia reducir la
eficiencia. Hacer intercambios de idiomas un diseo desafiante
ocupacin, y los diferentes compromisos que los diferentes idiomas ms
apropiados para los diferentes tipos de tareas.
Lengua sintaxis y la semntica
Para preparar un escrito del usuario para la ejecucin del programa, el
lenguaje del procesador debe realizar varias tareas. En fin,
cientficos se refieren a estas tareas como la exploracin (anlisis
lxico), anlisis sintctico (anlisis de la sintaxis), y generacin de
cdigo
(anlisis semntico).
Scanning, el primer paso, dice la secuencia de caracteres que es un
archivo de cdigo fuente y crea una secuencia de

fichas de la lengua. Tokens son las palabras de un idioma, y fichas se


dividen en varias categoras. A modo
puede ser una palabra clave como el retorno o una palabra reservada como
cadena, un smbolo especial como '+', el nombre de una variable
o como identificador myCount, literal o una constante como el nmero de
3,14 o la cadena de caracteres Por favor, introduzca
su nombre:.
Despus de que el escner "tokenizes" el cdigo fuente, el intrprete
acepta la lista de fichas de entrada y se basa
un "rbol de analizar", de acuerdo con las reglas sintcticas de la
lengua. El analizador de simblicas pruebas de la corriente en contra de
la sintaxis,
o las reglas de gramtica, de la lengua, y en el proceso se encuentra
muchos de los errores que los programadores hacen.
La sintaxis de una lengua describe la admisibles las declaraciones en el
idioma. A raz de la sintaxis correcta no
no garantizar la correcta programacin, pero requiere de programacin
correcta sintaxis correcta. Por ejemplo, en Ingls, el
frase, "El pulpo peinar su cabello" es sintcticamente correcta, pero
tonto. Por otro lado, la frase, "El
mab corri tras el autobs "no es sintcticamente correcta, porque el
diccionario no reconocer el token" MAB ". En
lenguajes de programacin, como en Ingls, muchos errores de sintaxis se
producen a causa de faltas de ortografa y errores tipogrficos.
Hoy en da, la sintaxis de la lengua normas son generalmente expresada
en Backus forma-Naur (BNF), o ampliar Backus-Naur
forma (EBNF), despus de John Backus (inventor de FORTRAN) y Peter Naur.
BNF utiliza un conjunto de normas o "producciones"
para describir la gramtica, ni sintaxis.
En el lado izquierdo de una produccin, la BNF presenta un concepto
lingstico conocido como un "no-terminal".
Ejemplos de la no-terminales de Ingls como "verbo-frase" y "oracin".
En un lenguaje de programacin,
ejemplos de terminales no podra ser "expresin" o "expresin".
No son terminales de los llamados porque se pueden desglosar en
combinaciones de conceptos ms pequeos. Para
ejemplo, un verbo-frase puede consistir de un verbo y un objeto-directala frase. En ltima instancia, la gramtica se define el
unidades de la lengua que no puede ser reducido an ms, las palabras de
la lengua, y estos son llamados "terminales".
En el lado derecho de una produccin, el BNF muestra las posibles
combinaciones de no-terminales y / o terminales
que puede ser sustituido por el de ms alto nivel no-terminal en el lado
izquierdo. Aqu est una gramtica para matemticas
expresiones:
1 expresin -> plazo | plazo expresin add_op
Plazo 2 -> factor | factor plazo mult_op
Factor 3 -> identificador | nmero | - factor | (expresin)
4 add_op -> + | -5 mult_op -> * | /
Las lneas verticales significan "o". Para simplificar la discusin a
fin de que no necesitamos tambin la oferta para la creacin de normas
"Identificadores" y "nmeros", suponer que los identificadores son
vlidos los nombres de variables y los nmeros son los nmeros vlidos.

Vamos a tratarlos como terminales.


Produccin 1 dice que una expresin puede consistir ya sea de un plazo,
o de una expresin ms un add_op
(Adems operador), ms un plazo. Produccin 2 dice que un plazo puede
ser un factor, o puede ser otro plazo ms
un mult_op (operador de multiplicacin), adems de un factor.
Por ejemplo, podemos analizar la siguiente expresin de acuerdo con la
gramtica:
X * 3 + 4
Podemos, por el artculo 1, sustituir la expresin original con otro de
expresin (X * 3), un add_op (+), y
un plazo (4). En el artculo 2, la nica razn plazo (4) puede ser
sustituido por un factor, que puede, por el artculo 3 se sustituye
por un nmero (4), que es un terminal para nosotros.
Sigue siendo para nosotros para analizar la expresin (X * 3). En este
punto, en el artculo 1, la nica sustitucin de
(X * 3) es un trmino. En el artculo 2, el trmino (X * 3) puede ser
sustituido por otro trmino (X), un mult_op (*), y
un factor (3). Una vez ms, el artculo 3 dice que el factor (3) puede
ser sustituido por un nmero (3), que es una terminal.
En el artculo 2, el trmino (X) puede ser sustituido por un factor (X),
que por el artculo 3 puede ser sustituido por un identificador
(X), que se dice una terminal para nosotros.
Esa descomposicin de una expresin ms compleja en sus terminales de
acuerdo a las reglas de la gramtica
se denomina una derivacin. El resultado del xito de una derivacin es
un rbol o analizar la sintaxis de rbol. Aqu est el rbol de analizar
para la derivacin que acaba de terminar:

Para calcular el significado de la expresin, analizar el rbol puede


ser atravesada de abajo hacia arriba, la informtica
la multiplicacin en primer lugar y luego realizar la adicin.
Si una expresin puede ser analizada de acuerdo con la gramtica de la
lengua, la expresin se ajusta a
la sintaxis de la lengua. Una vez que el analizador crea el rbol de
analizar, el compilador puede trabajar desde la parte inferior de la
rbol al principio, la creacin de la mquina las instrucciones para la
aplicacin de la expresin. Esta ltima fase se llama cdigo
generacin.
Hoy en da la mayora de las descripciones de la sintaxis del lenguaje
utiliza una versin (hay varias) de EBNF. Algunos notational
simplificar los cambios de las representaciones de las producciones. En
particular, EBNF utiliza llaves para indicar "cero

o ms casos de ", y que utiliza entre corchetes para indicar las partes
opcionales de una produccin. EBNF usos
parntesis y vertical "o" separadores para indicar varias opciones para
un solo elemento. Podemos reescribir
por encima de la gramtica utilizando este EBNF notacin:
expresin -> (term (+
expresin -> term | term expresin add_op
A partir de esta norma, que puede generar:
expresin -> term
expresin -> + expresin term
expresin -> expresin + + term term
expresin -> expresin term + + + term term
...
expresin -> term term + + + term term term ... +
As, la notacin EBNF dice simplemente:
expresin -> (term (+ | -) term)
Una expresin es un trmino seguido por cero, uno, o muchos trminos
aditivo.
Aqu est un ejemplo de EBNF utiliza para representar un elemento
opcional en una produccin de:
-en caso de declaracin -> if (expresin) una declaracin [else]
Esta produccin dice que si una declaracin-consta de la palabra clave
si, seguido de un parntesis abierto, seguido por
una expresin, seguida de un parntesis cerrado, seguido de un programa
de declaracin, opcionalmente, seguido por el
palabra clave y otra declaracin de otro programa.
Un requisito muy importante para un lenguaje de programacin gramtica
es que sea inequvoco.
Dada una expresin en la lengua, debe existir una y slo una vlida
derivacin en la lengua.
Para ilustrar una gramtica ambigua, considere la posibilidad de esta
simplificacin de la gramtica de matemticas
expresiones:
1 expresin -> expresin operador expresin | identificador |
nmero | - expresin | (expresin)
2 operador -> + | - | * | /
Podemos analizar de nuevo la expresin (X * 3 + 4) procedentes de la
izquierda a la derecha, y el resultado
ser el mismo rbol que analizar derivados de la gramtica ms compleja.
Sin embargo, esta simplificacin de la gramtica tambin
permitir un enfoque de derecha, con el siguiente resultado:

El significado de la segunda de anlisis es muy diferente de la primera,


porque en el anlisis de la derecha
Adems se produce antes de la multiplicacin. Esa no es la habitual
jerarqua de las operaciones, y la segunda
analizar rbol, en general, producir un valor diferente para la
expresin de la primera.
Debido a que la simple gramtica puede producir en dos direcciones
distintas y vlidas para analizar rboles de la misma expresin, la
la gramtica es ambigua. Gramticas lenguaje de programacin debe ser
inequvoca.
Mira de nuevo en la primera gramtica, el ejemplo ms complejo, y la
notificacin de cmo la gramtica impone una jerarqua
de las operaciones de multiplicacin y divisin antes de producirse la
adicin o sustraccin. Gramticas lugar correcto superior
"Precedencia" menor en las operaciones de la cascada de producciones.
Otro elemento clave de un determinado correctamente la gramtica es la
"asociatividad" elementos de la lengua. Tiene un matemtico
operador asociado de izquierda a derecha, o derecha a izquierda? Esto
hace una diferencia con expresiones como (9 - 4 - 2).
Izquierda asociatividad de los operadores de los rendimientos 3, si bien
los rendimientos asociatividad derecho 7. Cmo la gramtica expresar
las normas
asociatividad?
Una produccin como esta es la izquierda-asociativo:
expresin -> plazo | plazo expresin add_op
Una produccin como sta es de derecha asociativo:
expresin -> plazo | plazo add_op expresin
La diferencia significativa es que la recursin (una expresin que es
parte de una expresin) est a la izquierda
en el primer caso, y de la derecha en el segundo caso.
Uso de la izquierda-asociativas de produccin a analizar (9 - 4 - 2)
resultados en este rbol de analizar:

Uso de la derecha asociativas de produccin para analizar la misma


expresin en los resultados de este rbol:

El resultado es 3 en la izquierda-gramtica asociativa, y 7 en el


derecho de asociacin-la gramtica.
RESUMEN
La instruccin de la mquina establece mismos constituyen la primera
generacin de lenguajes de programacin.
Programas fueron concebidos como secuencias de operaciones de la
mquina, y los programadores trabajan directamente con el
hardware, a menudo de entrar en el cdigo de unos y ceros directamente a
travs de los interruptores del panel frontal. Asamblea
idiomas, utilizando cadenas de caracteres mnemotcnico para representar
a mquina las instrucciones, formado por el segundo
generacin de lenguajes de programacin. A partir de FORTRAN, en 1954,
la tercera generacin de idiomas
permite a los programadores a trabajar en un nivel superior, con idiomas
que son mucho ms independientes de la
equipo.
Los programas pueden ser compilado o interpretado. Compiladores generar
instrucciones mquina que puede ejecutar
directamente en el equipo, independientemente de la disponibilidad de
ms el compilador programa. Los intrpretes, sobre la
Por otra parte, son programas que leen y ejecutar el cdigo fuente una
lnea que a la vez. Java es un entorno que
ambos usos. Cdigo fuente de Java es compilado en la mquina
independiente de bytecode, y la Mquina Virtual de Java
interpreta el bytecode en ejecucin. Muchas implementaciones de JVM hoy
tambin compilar bytecode a la mquina
instrucciones.
Algunos idiomas se describen como imperativo, y de esas hemos hablado de
procedimiento, orientado a objetos,
y lenguajes de scripting. Otras lenguas se describen como declarativo, y
de esas hemos hablado funcional
idiomas.
Al disear un nuevo idioma, los cientficos valor de la eficiencia de
ejecucin, la legibilidad, la facilidad
de la aplicacin, la expresividad, la regularidad, la extensibilidad, la
normalizacin, hardware y sistema operativo
independencia, y la seguridad. No es posible alcanzar todas las virtudes
al mismo tiempo, por lo que significa el idioma de diseo
sabia hacer intercambios para el uso previsto.
El procesamiento del lenguaje programas como compiladores e intrpretes
pasar por las fases de exploracin, anlisis sintctico,
y generacin de cdigo. De escaneo tambin se conoce como anlisis
lxico, y la salida del escner es una corriente de
fichas en la lengua (palabras clave, nombres de variables, etc.)
Analizar tambin se conoce como anlisis sintctico, y la
analizador debe verificar que el flujo de fichas se ajusta a las normas
de la gramtica de la lengua. La salida de la
analizador es analizar un rbol. Por ltimo, la generacin de cdigo,
tambin conocido como anlisis semntico, consiste en atravesar el
analizar
rbol de abajo hacia arriba, la creacin de las necesarias instrucciones
de la mquina.

La mitad de un siglo en el computadora de edad, el mundo del software


abarca una amplia variedad de fines generales
y para fines especiales lenguas sobre la base de definiciones formales y
gramticas. Los intrpretes, compiladores, virtual
mquinas, o los tres, apoyo a la mirada de programas escritos en estas
lenguas. El futuro probablemente a
mayor diferenciacin y especializacin de idiomas y programas de
computadora como los cientficos perfeccionar sus
pensando en la mejor forma de traducir la intencin de instrucciones en
la mquina.
REPASO DE PREGUNTAS
4.1 Por qu era importante para la historia de los lenguajes de
programacin que, incluso en su introduccin, FORTRAN
generado programas eficientes?
4.2 Teniendo en cuenta lo que sabe de los idiomas, lo que sera una
buena opcin para:
un tratamiento de un archivo de texto, tales como un sistema de registro
de errores, en busca de determinados tipos de eventos?
b desarrollo de una aplicacin de inteligencia artificial para
diagnosticar la enfermedad, habida cuenta de una lista de sntomas?
c escritura de software para una nueva computadora impresora?
4.3 sta es una funcin C que calcula la suma de una serie de nmeros
enteros. Usted puede comenzar a asumir que se
ser siempre inferior o igual al final (begin <= end):

Reescribir esta funcin a fin de que utiliza la recursividad en lugar de


iteracin.
4.4 Suponga que un idioma se describe una declaracin-secuencia como una
secuencia
de
una
o
ms
declaraciones
separados por punto y coma (asumir declaraciones se definen en otros lugares),
pero
no
con
puntuacion
en
la
final
de
la
declaracin-secuencia.
Escriba
el
EBNF
produccin.
4.5 Dada la gramtica siguiente:

Dibujar el rbol completo para analizar la expresin:

2 * (3 + 5) + (6 + 8)
4.6 Describir la forma en que un programa se pasa de:
El escner una a la intrprete.
b El analizador al analizador semntico.
4.7 Aqu est un contexto libre de la gramtica en BNF forma:

Reescribir esta gramtica en forma EBNF.


4.8 Qu significa este Plan funcin hacer?

4.9 Dar un ejemplo de una irregularidad en un idioma que usted est


familiarizado.
4.10 Es cada vez tiene sentido escribir un programa en un idioma, la
planificacin
desde
el
comienzo
para
volver
a
escribir
el programa ms adelante en un idioma diferente? D un ejemplo de una situacin
en
la
que
dicho
plan
podra
tiene sentido, y no simplemente como resultado la prdida de tiempo y esfuerzo.

CAPITULO 5

PROGRAMACION EN JAVA

INTRODUCCIN
Java es una de un gran nmero de lenguajes de programacin de
computadoras en uso hoy en da. Dado que se trata de un lenguaje
bastante nuevo,
haber sido por primera vez en 1994 por Sun Microsystems, su diseo
aprovecha las ventajas de las modernas ideas acerca de lo que
es un buen lenguaje de programacin. Histricamente, los nuevos
lenguajes de programacin en general se han tomado aos para
convertirse en popular, pero Java disfrutado de un crecimiento sin
precedentes en popularidad desde el da de su liberacin. De hecho, hoy
Java es, con algunas medidas que el lenguaje ms popular para los nuevos
trabajos (http://www.tiobe.com/tpci.htm).
Muchos libros se han escrito la enseanza de programacin Java, y no es
nuestro propsito en este captulo
para proporcionar un completo tutorial sobre la programacin Java. En
lugar de ello, vamos a introducir las estructuras bsicas de
programacin
y tcnicas con Java. Esperamos que esta exposicin a un muy buen idioma
ayudar a los lectores a comprender
ideas presentadas en otros captulos sobre temas de software,
algoritmos, sistemas operativos, etc
En este captulo vamos a mostrar pequeo pero completo de programas se
puede probar por ti mismo. Si an no
tener acceso a un compilador Java y Java Virtual Machine (tambin
llamado Java Runtime Environment), puede
descargar rpidamente la totalidad del paquete de Java, incluida la
excelente documentacin, directamente desde el sitio web de Domingo
(http://java.sun.com/javase/). Para trabajar con este captulo,
descargue el Java Standard Edition Kit de desarrollo de
(JDK), que tambin incluye el Java Runtime Environment.
Tambin es una buena idea para descargar la documentacin (llamado
JavaDocs) a su propio equipo, si tiene
la habitacin de su disco. Puede llegar a la misma documentacin en
lnea en el sitio web Domingo, pero su acceso
ser ms rpido si los archivos son residentes en su propio computadora.
Para escribir programas en Java, puede utilizar cualquier editor o
procesador de textos que te gusta. Hay tambin varios
entornos de desarrollo integrados (IDEs) disponibles. En primer lugar le
recomendamos que simplemente utilice un editor con
que ya estn cmodos, de los IDEs tienen una curva de aprendizaje de su
propia para usted para hacer frente a, y
Nuestro enfoque ser sobre los fundamentos de la lengua.
TIPOS DE JAVA
Cada lenguaje de programacin define un conjunto de tipos de datos que
reconoce. En el caso de los principios de FORTRAN,
la nica lengua reconocida enteros y nmeros de punto flotante. Ms
lenguas modernas reconocen una mayor
gama de tipos de datos, tales como nmeros de los diferentes niveles de
precisin, cierto-o-falsos valores, y de cadenas alfanumricas
caracteres. La mayora de las lenguas modernas tambin permiten al
programador definir nuevos tipos de datos.

Java es un objeto orientado a la lengua, lo que significa que el


lenguaje Java funciona en objetos de software. La idea
de un objeto de software es una idea moderna, y el objeto de orientacin
significa que el programador puede definir un nuevo tipo de
elemento de datos mediante la definicin de una nueva clase. Despus de
haber definido una nueva clase (por ejemplo, automviles), el
programador puede crear
un ejemplo de objetos de la clase (llamado una instancia de una clase,
por ejemplo, un Ford Mustang con un vehculo particular ID) y
manipular como un objeto nico. Esto significa que los programas no se
limitan a los nmeros de la informtica, cadenas de
caracteres, etc programas tambin pueden calcular los automviles, los
pedidos de fbrica, calendarios de conciertos, etc directamente.
Si esto suena mgico, espere a leer ms en las clases y objetos
procedentes seccin ms adelante en este captulo.
Tenga la seguridad de que, al final, todo se reduce a bits (0s y 1s) en
el equipo. Objeto orientacin es slo
una forma diferente de nombrar y pensar en lo que est pasando en el
equipo, y es til porque normalmente
hace pensar en el clculo ms natural. Adems, a menudo objeto de
orientacin conduce a que el software es ms
fcilmente utilizados para mltiples fines, por lo tanto, en constante
expansin de nuestros recursos tiles, los programas de prueba.
Sin embargo, los programadores de Java necesitan algunos tipos de datos
bsicos para empezar. Estos tipos primitivos de Java no son objetos,
pero son simplemente las definiciones de las variedades de los datos con
el que todos los programas Java pueden trabajar. La primitiva tipos
se dividen en tres categoras:

Puede parecer extrao para llamar a los caracteres uno de los tipos
integral, pero la razn es que cada personaje es
representado por un valor entero. Por ejemplo, cuando un tipo "A", el
teclado enva el valor 65,
el cdigo entero de "A", para el equipo. El cdigo de "B" es 66, etc
minsculas tienen cdigos diferentes.
Por ejemplo, el cdigo entero "a" es 97, y el cdigo de "b" es 98. Por
lo tanto, las cartas son slo nmeros enteros por debajo,
y el software trata bits como nmeros o cdigos de caracteres en funcin
del contexto.
Los tipos primitivos de Java, por categora, son las siguientes:

Entre el entero y de punto flotante tipos, el costo de la computacin


con mayor precisin es que la
mayor precisin los tipos requieren ms espacio para almacenar, y los
clculos implican un mayor nmero de bits.
Aqu tiene un ejemplo de programa Java que utiliza slo tipos de datos
primitivos:

Cada programa en Java es una clase, y es por eso que la primera lnea
dice que se trata de una clase pblica (disponible para
el uso por cualquier persona) llamado "Primitivo". La prxima lnea dice
que este es el comienzo de un "mtodo" llamado "principal". Cualquier
Java
programa debe tener un "principal" mtodo declarado exactamente como es
este. La lnea
"public static void main (String [] args) ("
es donde se inicia el programa. Esta lnea ser en todos sus programas.
Esta lnea le dice a la Mquina Virtual de Java
(JVM), donde para comenzar a publicar su programa.
"Pblico" significa que cualquiera puede ejecutar el programa,
"esttica" significa que slo hay un mtodo principal para la clase,
"Nula" significa que el principal mtodo no mostrar los valores, y
"String [] args" significa que si el usuario proporcionado ninguna
"Argumentos de lnea de comandos", que estn disponibles para el
programa en una serie de variables de cadena llamado "args". Algunos de
probablemente este no tiene sentido ahora mismo, por lo que por ahora
simplemente recordar que cada uno de sus programas
debe tener un mtodo principal, y la primera lnea del mtodo principal
debe ser escrito exactamente como este ejemplo est escrito.
Observe que cada declaracin en Java termina con un punto y coma! Aviso,
tambin, que el lenguaje Java es sensible a maysculas y minsculas ".

La variable "x" es diferente de la variable "X." El nombre de clase de


"Primitivo" es diferente de un nombre de clase
de la "primitiva".
Los siguientes tres lneas de "declarar" las tres variables de tipo int.
Las variables x, y y z son cada int variables,
lo que significa que cada uno requiere de 32 bits para el
almacenamiento, y cada una representa un valor entero. El
JVM se reserva el espacio necesario para X, Y y Z.
Los siguientes tres lneas de asignar el valor de 7 a y 4, para z, y la
suma de 7 y 4 a x.
Por ltimo, la ltima lnea muestra los caracteres x = y el valor de x,
que es de 11, sobre la "salida estndar
dispositivo ", por lo general la pantalla. El resultado es el siguiente:
x = 11
Notificacin de las "llaves" (es decir, (...)) en el cdigo. Un par de
llaves rodea el "cuerpo" de la
clase primitiva, y un par de llaves dentro de Primitivo rodea el cuerpo
del mtodo MAIN.
Usted debe utilizar llaves para marcar el comienzo y el final de un
"bloque de cdigo" en Java. Un bloque de cdigo es un "compuesto
declaracin ", y un bloque de cdigo que puede consistir en
declaraciones de variables y declaraciones. Las clases, los mtodos, los
bucles
(que todava no hemos discutido), y las estructuras de control (que
todava no hemos discutido) define todos los cdigos
bloques, bloques y pueden ser anidados uno dentro de otro a cualquier
nivel.
Usa tu editor favorito para escribir este cdigo y, a continuacin,
guardar su trabajo como archivo Primitive.java.
El siguiente paso es compilar el cdigo usando este comando:
javac Primitive.java
Cuando es exitoso, puede ejecutar el programa escribiendo:
java Primitiva
Asegrese de que todas estas obras antes de continuar.
Aparte de los tipos primitivos de Java, todos los tipos de datos en Java
son clases. En otras palabras, cada clase en Java
representa un nuevo tipo de datos. Un programador en efecto, crea un
nuevo tipo de datos Java cada vez que el programador
crea una nueva clase. La clase primitiva es una clase, pero no tiene
instalaciones para su uso por otros
programas, por lo que no es un buen ejemplo de una reutilizables nuevo
tipo de datos. Pronto vamos a mostrar las clases que no crear nuevas
tipos de datos que pueden ser tiles a otros programas, sin embargo.
A veces encontrar que es necesario operar sobre los objetos en lugar de
tipos primitivos. Esto se debe a que
los objetos son tipos de referencia, y se manejan internamente de manera
diferente tipos primitivos. A los efectos de la
la conversin de variables de tipos primitivos a los tipos de
referencia, Java proporciona un conjunto de "envoltorio clases", de
manera que la
siempre programador puede crear un objeto que tenga el mismo valor como
una variable de un tipo primitivo.
El envoltorio clases Java correspondientes a los tipos primitivos son
los siguientes:

Por ejemplo, si el programador necesita un objeto que corresponde a la


entero 22148, el programador puede
utilizar este cdigo:
Ix Integer;
ix = new Integer (22148);
La primera lnea declara que ix es una variable de tipo Integer. Desde
Integer es una clase, no una primitiva
tipo, ix es un objeto. La JVM se reserva espacio para un objeto Integer,
y no slo de 32 bits para un int.
La segunda lnea dice que para crear un nuevo objeto Integer cuyo valor
es 22.148, y asignar ese objeto a la variable ix.
Otro incorporado en la clase Java que utilizar muy a menudo es la clase
String. Un objeto String
consta de ninguno, uno, varios o muchos caracteres que son tratados como
un objeto. Por ejemplo:
MiNombre cadena;
MiNombre = "Carl";
La primera lnea declara que la variable MiNombre es de tipo String. Si
el programador imprime la variable
MiNombre, todos los personajes en la palabra Carl se imprimirn:
System.out.println ( "nombre:" + MiNombre);
El signo ms en el println declaracin dice que "concatenar" (se unen)
los caracteres "nombre:"
y "Carl". El resultado ser:
Nombre: Carl
ARRAYS
Una estructura de datos es una forma de organizar los datos, matrices y
se encuentran entre las ms simples de las estructuras de datos. Un
array
es una estructura de datos que contiene mltiples valores del mismo
tipo. Se habla de una matriz de cadenas, o una serie
de ints.
Uno declara una matriz mediante el uso de corchetes, ya sea despus de
la declaracin de tipo o despus del nombre:
int [] x; / / declara bien de una serie de ints
int y [];
Declarar una matriz simplemente le da un nombre. Para crear los
elementos de un array, se debe utilizar tambin las nuevas
palabra clave, junto con un nmero entero entre corchetes para indicar
el nmero de elementos en la matriz:
x = new int [15]; / / 15 int elementos, cada uno se pone a 0
y = new int [10]; / / 10 int elementos, cada uno se pone a 0
Una vez que la matriz se crea, su tamao no se puede cambiar.
Los elementos individuales en una gama recibir los valores por defecto
de cero para tipos numricos, de caracteres nulos, y
nulos para cuerdas y otros objetos.

Mediante el uso de un subndice, se puede asignar valores


elementos de un array, o leer el valor de un elemento. En
matrices son de base cero, lo que significa que el primer
matriz es a que se refiere con un subndice de 0.
x [4] = 66; / / asignar el valor 66 a la 5 elemento
y c = [1]; / / leer el valor de la 2 elemento en c
Cada programa Java el principal mtodo declara una matriz
por convencin llamada args, para
aceptar ningn argumento que el usuario pueda suministrar
de comandos. Si el usuario escribe:
java myProg firstParam secondParam
Nombre: Carl

a los
Java,
elemento de la

de cadenas,
desde la lnea

myProg el programa puede recuperar la cadena "firstParam" de args [0], y


la cadena "secondParam" de
args [1].
OPERADORES DE JAVA
Los operadores son smbolos en un lenguaje que a las funciones
incorporadas. Java tiene un gran nmero de operadores y,
ya que este captulo slo servir para introducir el lenguaje Java, no
vamos a discutir todos ellos. Aqu estn los
los operadores se discutir:

Por la cesin, es decir, teniendo el valor en el lado derecho del signo


igual (a veces llamado RS) y dando
que el valor de la variable en el lado izquierdo del signo igual (a
veces llamado LS). Si el valor de k es de 5, despus de la
siguiente declaracin se ejecuta, el valor de c ser tambin 5. Del
mismo modo, el valor de k seguir siendo 5 despus de la ejecucin:
c = k;
La aritmtica de los operadores el desempeo de sus funciones esperadas.
Por ejemplo, si el valor es de un 3, y el valor
b es de 5, despus de la siguiente declaracin ejecuta el valor de x
ser 15:
x = a * b;
En contraste con algunos otros idiomas, Java no tiene el operador de
exponenciacin. Si un programador quiere aumentar
un nmero a cierto poder, el programa debe realizar la exponenciacin,
ya sea por multiplicar varias veces, o por
utilizando el POW () mtodo de la clase de matemtica que forma parte de
la tecnologa Java en la biblioteca.
El + + y - son operadores de la conveniencia de que muchos operadores

como programadores, ya que salvo algunas


escribiendo. Las siguientes dos declaraciones tienen el mismo efecto:
m = m + 1;
m + +;
En cualquier caso, el valor de m se incrementar en 1. El - operador
funciona de modo similar, salvo que el valor de
la variable se reducir en 1.
El resto de los operadores en nuestra lista de operadores lgicos.
Usamos operadores lgicos para probar la verdad de las condiciones
importante para nuestros programas. Por ejemplo, si nuestro programa se
va a encontrar todas las casas en un barrio
cuyos valores fueron evaluados ms de $ 200.000, nuestro programa puede
tener una declaracin como sta en que:
if (assessedValue> 200000) (
Vamos a discutir el uso de declaraciones si en la seccin sobre las
estructuras de control de Java, por lo que por ahora simplemente
observar que el ">" permite a un operador para poner a prueba la verdad
de la condicin de que valor es superior a
200.000 dlares. Si el valor de la variable assessedValue en el momento
de la declaracin se ejecuta es mayor que
200000, el operador lgico ">" devolver un valor de verdad. De lo
contrario, regresar falso.
Aqu hablaremos de los dems operadores lgicos en la seccin sobre las
estructuras de control de Java. Recuerde, tambin, que
no hemos discutido todos los operadores de Java. Java tambin ha para el
ensayo de los operadores y poco cambio de valores, condicionada
declaracin de ejecucin, modulo aritmtica, y algunas otras funciones.
JAVA IDENTIFICADORES
Cada lenguaje de programacin tiene sus reglas de cmo nombrar los
elementos de un programa. En Java, los nombres deben
siempre comienzan con una carta. Cartas de incluir Java en todas las
minsculas y maysculas, as como el guin de subrayado
carcter "_" y la moneda smbolo "$".
Despus de la primera carta, cualquier nmero de letras y / o dgitos
puede seguir. Un identificador de Java pueden ser de cualquier longitud,
y es una buena prctica de programacin utilizar nombres lo
suficientemente largo como para ser auto-descriptivos. Ms experimentado
programadores suelen utilizar nombres de variable ms largo, porque ya
los nombres usualmente hacer programas mucho ms fcil
a leer y mantener.
Java es un "asunto sensible" idioma. Eso significa que Java reconoce
maysculas y minsculas como
diferentes. El identificador de la universidad es diferente de la
Universidad, y ambos son diferentes de
UNIVERSIDAD.
Si bien uno no est obligado a hacerlo, la prctica estndar de
programacin se iniciar todos los nombres de clases con un
letra mayscula, y para empezar todos los dems nombres con una letra
minscula. Adems, cuando un identificador se compone de ms
que una palabra, la prctica habitual es utilizar lo que se llama
"camello caso" capitalizacin (que es "humpy"). Aqu estn
algunos ejemplos de nombres de variables:

highWindWarning
wonLostRecord
mothersMaidenName
Estructuras de control bsicas
Todos los lenguajes de programacin proporcionan maneras de alterar la
secuencia de instrucciones que efectivamente se
ejecutado cuando un programa se ejecuta. Esta capacidad para seleccionar
lo que la lgica a aplicar, o elegir un adecuado
nmero de veces para desplazarse a travs de una seccin de cdigo, es
lo que hace que los programas lo suficientemente flexible como para ser
til en el mundo real. Imagine un programa para calcular el promedio de
calificaciones de los estudiantes en una clase,
pero imagino que el programa exige a todas las clases tienen exactamente
el mismo nmero de estudiantes, y
no tiene ninguna manera de manejar correctamente la falta de un grado!
Este programa rgido que no se vale la pena
a escribir.
si
Los ms comunes estructura de control para la seleccin de un bloque de
cdigo a ejecutar es el caso de declaracin. El si
declaracin puede ser utilizada en su forma simple o, en su ampliarse si
otra forma-. Aqu est un ejemplo de un simple
en caso de declaracin:
if (grado> 0) (
sumOfGrades = + sumOfGrades grado;
numberOfGrades + +;
)
Esta declaracin dice que, si la variable es de grado mayor que 0, a
continuacin, agregue el grado de valor a la variable
sumOfGrades, y el incremento de la variable numberOfGrades por 1. De lo
contrario, no hacer nada. Cualquiera de los dos
declaraciones despus de la declaracin si ser ejecutado, o no ser,
porque son tanto dentro de la
llaves que siguen el caso. Las llaves marca un bloque de cdigo.
Si la prueba condicin es verdadera, entonces el bloque de cdigo de la
declaracin si se llevar a cabo. Si la condicin
es falsa, el bloque de cdigo se evitar.
Aqu est la sintaxis de la simple declaracin si:
if (<conditional expression>) <sentencia>
La expresin condicional debe evaluar a true o false. Si la expresin
condicional es cierto,
la siguiente declaracin ser ejecutado, pero no otra cosa. El
<sentencia> tambin puede ser un compuesto
declaracin, que es otra manera de decir que <sentencia> puede ser un
bloque de cdigo encerrado en llaves.
Un complejo de declaracin o bloque de cdigo se adjunta en llaves, y
dentro de cada declaracin debe ser denunciado
con un punto y coma.
Aqu est un ejemplo de un si-else:

El si-else permite que el programa para seleccionar uno de dos caminos


mutuamente excluyentes de ejecucin. En
este caso, si el viento es fuerte, el programa llama a un mtodo para
izar una pequea vela. En caso contrario, el programa pide un
mtodo para izar una gran vela. Por cierto, se puede decir que
hoistSmallSail () y hoistLargeSail ()
mtodos porque son un par de parntesis se indica el nombre. Un mtodo
es llamado un bloque de cdigo, y nosotros
hablar de mtodos cuando hablamos de las clases y objetos con ms
detalle ms adelante.
Aqu est la sintaxis de la si-else:
if (<conditional expression>) <statement_one>
ms <statement_two>
Si la expresin condicional es cierto, statement_one ser ejecutado. Si
la declaracin es condicional
falsa, statement_two ser ejecutado. Como antes, statement_one y puede
ser statement_two
compuestas, es decir, bloques de cdigo en el marco llaves.
para
Programas de frecuencia debe iterar a travs de bucle o un bloque de
cdigo varias veces. Java tiene varias estructuras de control
para este propsito, y uno de los ms comnmente utilizado las
estructuras de control de este tipo es el de bucle.
Supongamos que queremos calcular el promedio de grado en una clase de
los estudiantes. Tenemos los resultados en un archivo
Los estudiantes llamados, y cada lnea en el archivo contiene una sola
puntuacin. Cada resultado es el grado de uno de los estudiantes
(por ejemplo, 89,5). Podramos escribir cdigo como este para leer las
partituras del archivo y calcular el total de
todas las puntuaciones:

La primera lnea declara una cosa llamada un BufferedReader, que es


"envuelto alrededor de" un FileReader
que se abre el archivo llamado Estudiantes. Vamos a discutir este tipo
de entrada / salida de las declaraciones ms en el
en la seccin de entrada y salida. Esta declaracin se declara la
variable a ser un BufferedReader asociado con
el archivo de los estudiantes.
Observe que las declaraciones de programacin en Java puede seguir un
segundo, tercero, o ms lneas. El Java
compilador seguir las lneas interpretar como una declaracin hasta que

se encuentre el punto y coma, que marca el


final de la declaracin.
De la declaracin comienza con parntesis se adjuntaba tres expresiones,
que estn separados por punto y coma.
La primera define la expresin de las condiciones iniciales en el bucle
for. En este caso, la expresin declara una
int i llamada, y establece el valor de i a 1.
La segunda expresin en la declaracin se establece para una condicin
que se evaluar a true o
falsa. Cuando la condicin es verdadera, el bloque de cdigo de la
declaracin para ser ejecutado. En este caso, siempre y cuando
el valor de i es menor o igual al nmero de estudiantes, el bucle se
ejecutar.
La tercera expresin en la declaracin precisa de lo que hay que cambiar
cada vez que el bucle se ejecuta. Esto
expresin a veces se denomina el "incremento de expresin," porque es
normalmente empleado para cambiar el valor
de la variable poniendo a prueba en la segunda expresin. Tal es el caso
aqu, porque la tercera expresin dice
incrementar el valor de la variable i cada vez que el bucle se ejecuta.
El organismo o bloque de cdigo de la siguiente declaracin de los tres
expresiones entre parntesis. En este caso,
el readline () mtodo de la BufferedReader lee la siguiente lnea del
archivo en una variable de cadena
La puntuacin de llamada. Desde la BufferedReader lee cadenas de
caracteres, hay que convertir los caracteres en un
interior nmero de coma flotante antes de que podamos hacer nuestros
clculos. La ltima lnea dice usar el parseDouble () mtodo
de la doble clase de interpretar la cadena de caracteres de puntuacin
(por ejemplo, 89,5) como un doble (un punto flotante
nmero que puede incluir una parte fraccional). El doble es una clase de
Java del "envoltorio clases", que
discutido en la seccin sobre tipos de datos.
En resumen, para este bucle de ejecucin se iniciar con el valor de i
establece en 1. Despus de cada ejecucin de la
bucle, el valor de i se incrementa. El bucle se seguir ejecutando,
siempre y cuando el valor de i no es mayor
que el nmero de estudiantes. Cuando se convierte en mayor que el nmero
de estudiantes, la prueba condicional en el
segunda expresin de la declaracin de no (ser falsa), y el programa
"abandono" del bucle y
continuar en la prxima declaracin tras el bucle de cuerpo.
Aqu est la sintaxis de la declaracin de:
para (<initial>; <test condition>; <increment>) <body>
La expresin condicional debe evaluar a true o false. Si la expresin
condicional es cierto, el
cuerpo del bucle for ser ejecutado, pero no otra cosa. El <body> suele
ser un compuesto, que
es un bloque de cdigo encerrado en llaves. Cada declaracin en el
organismo debe darse por concluido con un punto y coma.
mientras
Otra estructura de control de bucle (iteracin), mientras que es la
declaracin. Supongamos que no sabemos cuntos
las puntuaciones de los estudiantes estn en el archivo de las
puntuaciones de los estudiantes. Podemos utilizar una declaracin al

mismo tiempo a leer el archivo hasta que no hay


puntuaciones ms en el archivo para ser ledo:

Nosotros utilizamos la misma que antes de BufferedReader para leer el


archivo de los estudiantes. Despus de leer la primera lnea en
el archivo, mientras que la declaracin de los controles para ver si la
puntuacin variable tiene un valor de null. La variable puntuacin
ser nulo si no hay nada en el archivo a leer. Mientras puntuacin no es
nulo, el cuerpo de la declaracin, mientras que
llevar a cabo-que "analizar", o interpretar, como un nmero
fraccionado, cualquiera que sea el justo BufferedReader
leer y, a continuacin, se dar lectura a la siguiente lnea en el
archivo.
La declaracin, mientras que la sintaxis es muy simple:
while (<loop condition>) <sentencia>
Una vez ms, la declaracin puede ser un bloque de cdigo encerrado en
llaves. En la medida en que la prueba se mantiene en situacin
cierto, el cuerpo de la declaracin, mientras que sigue a ejecutar. Esta
es una muy adecuada estructura de control cuando
no sabemos de antemano cuntas veces un bloque de cdigo debe ejecutar.
mientras que do Una variacin de la declaracin, mientras que es el do-tiempo. En el
caso de hacer la declaracin, mientras, el cuerpo
del bucle se ejecuta antes que el cdigo comprueba la condicin de
bucle. Cuando un programa debe ejecutar un bloque de cdigo
por lo menos una vez, el do-mientras que puede ser la mejor opcin para
el control de un bucle. Aqu est el cdigo para utilizar el do-mientras
que
declaracin en lugar de la declaracin, mientras que para leer el
archivo Estudiantes:

A primera vista, parece que esta versin guarda el cdigo. Sin embargo,
en este caso particular, este cdigo nos expone
al peligro. Si el archivo nunca debe estar vaco, la primera

convocatoria a parseDouble har que el programa para dejar con


un tiempo de ejecucin de excepcin, porque Double.parseDouble no puede
analizar un valor nulo. En esta aplicacin, que
hara mejor en utilizar el mismo tiempo en lugar de los do-tiempo.
Esta es la sintaxis de la do-bucle while:
hacer <loop body>
while (<loop condition>);
El bucle cuerpo puede ser, y por lo general, es decir, un bloque de
cdigo enmarcada por llaves. Mientras la condicin de bucle
sigue siendo cierto, el bucle se ejecutar cuerpo una y otra vez. El domientras que la estructura es particularmente apropiado
cuando lo necesite cuerpo del bucle para ejecutar al menos una vez cada
vez que el programa se ejecuta.
cambiar de
La ltima estructura de control vamos a discutir aqu es el switch. Como
si la declaracin, el
switch permite a su programa para seleccionar determinadas declaraciones
a ejecutar bajo ciertas condiciones. El
switch es ms compleja, y uno siempre puede utilizar una serie de
declaraciones si en lugar de un interruptor
declaracin, pero cambiar es muy adecuado y legible para algunos
problemas de programacin.
Supongamos que tenemos un grupo de estudiantes y desea asignar a
diferentes dormitorios, dependiendo de si
que son primer ao, sophomores, juniors, o personas de la tercera edad.
Supongamos que la variable se codifica yearInSchool
como un int, y se establece en 1 para primer ao, 2 para sophomores, 3
para juniors, y 4 para personas de la tercera edad. Podramos utilizar
este cdigo para decidir a los que dormitorio de cada estudiante debe
ser asignado:

Si un estudiante es un novato, el estudiante ser asignado a Oberlies


Hall; si el estudiante es un segundo, el
estudiante ser asignado a Kiriazides Hall, etc
Notificacin de la ruptura declaraciones. La declaracin dice que romper
para salir del switch. Si la ruptura
declaracin de falta, la ejecucin de cambiar la declaracin "a travs
de otoo" para el prximo caso. Algunas veces
usted quiere que eso suceda, pero ciertamente no siempre. Olvidar a
insertar la declaracin de romper convenientemente
es un error de programacin.
He aqu un ejemplo usando el switch para permitir "a travs de la cada"
de una condicin a la siguiente
en una forma til:

Observe que en este ejemplo, el caso de las declaraciones proceder de


mayor a menor, en lugar de la otra manera
alrededor. Los casos se pueden pedir en cualquier forma que tiene
sentido, incluso nonsequentially. El switch
ejecuta tomando el valor de la expresin integral dentro de los
parntesis (supongo que dayOfChristmas
es un int). El switch entonces se compara el valor de la expresin
integral a cada caso el valor.
Cuando se encuentra una coincidencia, el cdigo para que el caso
comienza a ejecutar.
En este ejemplo, cambiar la declaracin nos ayuda a escribir la letra de
la cancin Los Doce Das de Navidad.
Por ejemplo, si el dayOfChristmas equivale a 3, la ejecucin comenzar
en el caso 3 y continuar hasta que los encuentros
la pausa al final del caso 1. La declaracin de una pausa es necesaria
para evitar la ejecucin por defecto
mensaje de error. El resultado ser la letra para el tercer da de la
Navidad:
Tres gallinas francesas
Dos tortugas palomas
Y una perdiz en un peral
Aqu est la sintaxis para cambiar la declaracin:

El integrante de expresin debe evaluar a un valor entero. Esto a menudo


significa que la expresin integral
int es un carcter o un valor. En particular, la expresin no puede ser
un String (si bien esta opcin sera
bueno tener a veces).
Las declaraciones pueden ser compuestas, y en un "interruptor" de otras
sintaxis, compuesto declaraciones

dentro de un interruptor caso no tiene que ser enmarcada en llaves. Sin


embargo, si te gusta llaves, el Java
compilador aceptar llaves de todo el complejo de declaraciones.
El valor por defecto es opcional, pero creemos que un caso por defecto
debe ser siempre incluido, aunque slo sea para
proporcionar comprobacin de errores. Si el programa espera que el da
de Navidad a variar entre 1 y 12, es bueno
la prctica de poner por defecto en una declaracin que le permitir
saber si el valor de dayOfChristmas cada vez se vuelve
como algn valor distinto de 1 a 12. Especialmente con programas ms
complejos, por ejemplo, podra cdigo predeterminado
ahorrar muchas horas de depuracin. Sin la declaracin por defecto, si
ninguno de los casos coincide con la integral
expresin, la JVM simplemente salta sobre todo el cambio de cdigo. Tras
el caso por defecto se captura la
condicin anmala y mostrar dnde est el problema.
Aqu est un programa completo para imprimir las palabras a los 12
versos de los Doce Das de Navidad. El programa
mientras que utiliza un bucle para iterar a travs de los 12 versos. A
continuacin, utiliza un si-otra declaracin para decidir si este
es el primer verso o en uno de los versos ms tarde, lo que es necesario
porque la lnea sobre una perdiz en un peral ha
la palabra "y" en l para la 2 a travs de 12 versos, pero no para la
1 verso. El \ n al final de las lneas
tienen que ver con una "perdiz en un peral" es un ejemplo de una
secuencia de escape. Una secuencia de escape comienza
con una barra, y el siguiente carcter tiene un significado especial
para el compilador de Java. El \ n medios para insertar
una lnea, de modo que habr una lnea en blanco entre los versos. Hay
otras secuencias de escape y para tabbing
otras funciones, tambin.
Por ltimo, este programa muestra cmo aadir comentarios a un programa
escrito en Java. Cualquiera que sigue escribiendo
/ / En una lnea es tratada como un comentario, es decir, la
tipificacin es ignorado por el compilador de Java. Adems, cualquier
escribiendo
entre los caracteres / * y * / es tambin un comentario, y esas
observaciones pueden extenderse a travs de mltiples lneas. Si
por ejemplo un comentario multilnea comienza con / **, es un javadoc
(Java) comentario, y se incluirn
por el javadoc en el procesador genera automticamente la documentacin
del programa. Javadoc
observaciones pueden incluir etiquetas especiales, como autor @, que el
procesador javadoc reconoce cuando se
genera el formato HTML de la documentacin.
No vamos a describir el javadoc procesador en ms detalle en este
captulo, pero usted puede leer
javadoc acerca de los comentarios aqu:
http://java.sun.com/j2se/javadoc/. En nuestra opinin, el procesador es
javadoc
una de las magnficas contribuciones de Java ha hecho a la programacin
prctica. El procesador utiliza javadoc
observaciones dentro de los propios programas para generar atractivo y
documentacin completa de cada
clase. Maravilloso!
Como una cuestin de estilo de programacin, me gusta poner un

comentario tras el cierre de llaves que me dice


que bloque de cdigo se est terminado. Especialmente cuando muchos
bloques de cdigo estn anidados dentro de un otro,
esos comentarios me ayudan hacer un seguimiento de mis llaves. Este
estilo es una preferencia personal, no una norma.
Adoptar slo si as lo desea.

De programacin orientado a objetos


Java es un objeto orientado a la lengua, lo que significa que Java
facilita la escritura de orientada a objetos
programas. Objeto de orientacin es ms una cuestin de cmo uno piensa
acerca de la programacin que se trata de un particular
tcnica de programacin. Cuando uno escribe orientada a objetos de
cdigo, uno piensa de los programas informticos "cosas" que son
anlogos
a las cosas en el mundo exterior.
Por ejemplo, si nuestro trabajo es escribir software para el State
Thruway Autoridad para automatizado de cobro de peaje,
queremos pensar en el puesto de trabajo diferente dependiendo de si
tomamos la edad "de procedimiento" enfoque o
las nuevas orientado a objetos (OO) enfoque.

Utilizando el enfoque de procedimiento, que se rompen por el trabajo en


subtareas, o subrutinas, escriba el
rutinas, y las rutinas se combinan con un programa principal en una
secuencia de actividades a realizar. Podemos
carEntersThruway tienen un procedimiento, y una carExitsThruway
procedimiento, y podemos conservar la informacin
en un archivo acerca de los automviles utilizando el Thruway.
Utilizando el enfoque OO, queremos pensar en la "cosas" en nuestro
problema de dominio, y crear anlogos
clases de software. Por ejemplo, probablemente habra una clase de
vehculos, y que podra tener una
ThruwayInterchange clase, y una VehicleOwner clase. Nos gustara dar las
caractersticas que los vehculos
son importantes para nuestra aplicacin, tales como licenseNumber,
estado, marca, modelo y color. Desde que
necesario para realizar un seguimiento de los vehculos que entran y
salen de la Thruway, podemos aadir propiedades de vehculos
enteredAtInterchange y exitedAtInterchange. Asimismo, las propiedades de
un VehicleOwner
puede incluir nombre, apellido, streetAddress, ciudad, estado y cdigo
postal.
La lgica de un programa OO se codificarn como "mtodos" de los
objetos. En lugar de tener un aislado
o la aplicacin a escala carEntersThruway procedimiento, ya que podra
utilizar el enfoque de procedimiento, podemos
similares cdigo en un mtodo de la clase de vehculo. La lgica puede
ser la misma, pero en el enfoque OO
pensar en un objeto de vehculos que tengan "comportamientos" apropiados
a la aplicacin. Cuando un vehculo entra en
el Thruway, vamos a llamar del vehculo enterThruway mtodo, y el
vehculo objeto tratar
adecuadamente con este caso.
Los datos que opera sobre una lgica y una codifica puede ser el mismo
procedimiento para el enfoque y
la orientada a objetos, pero el objeto enfoque orientado organiza el
trabajo de otra manera. Cuando un objectoriented
programa se ha completado, un conjunto de clases es el resultado. Estas
clases, si bien diseados, pueden ser reutilizados
y ampliado con ms facilidad a fin de que los futuros proyectos de
programacin tienen una ventaja.
Poner el cdigo dentro de las clases tambin permite la funcionalidad a
ser encapsulado, lo que conduce a la ms eficaz
ensayos y ms fiable utilizar ms adelante. El software clases de
existir como sus propias entidades, con propiedades conocidas
(atributos), y bien definidos los mtodos. Uso de la herencia, el
enfoque OO tambin ofrece una forma estndar de aadir
funcionalidad sin cambiar en absoluto el cdigo que ya se ha escrito.
Hay menos tentacin de modificar
las clases que ya se han definido, implementado y probado. El resultado
es generalmente ms estable y
cdigo fiable.
Objeto de orientacin es un avance en la forma en que los programadores
de pensar en su trabajo. El enfoque OO lleva a
clases de software que ms de cerca el modelo del mundo real, y, por
tanto, la aplicacin ms natural
a pensar. Adems, la creacin de clases por lo general conduce a que el

cdigo es ms fcil de reutilizar. Ambos efectos plomo


a la mejor programacin de la productividad.
Clases y Objetos
La gente nueva a la programacin OO a menudo tienen dificultades para
distinguir lo que se llama clases de lo que son
llamada casos. Una clase es una especificacin, un plan, o quizs
incluso un concepto, como vehculo; un ejemplo es un
ejemplo especfico de una clase. De la clase de automviles, uno puede
construir o identificar los vehculos particulares. Mi Ford
con el vehculo ID 1FABP64T1JH100161 se dice que es una instancia de la
clase de automviles.
A menudo, la palabra objeto se utiliza como un sinnimo de la palabra
instancia. Tambin se dice que mi Ford es un objeto
de la clase de automviles. Esto puede ser confuso, especialmente en
primer lugar, porque Java, al igual que algunos otros OO
idiomas, tambin reconoce una clase llamada Objeto (capital O). De
hecho, cada clase en Java hereda de la clase
Objeto (vamos a discutir la herencia antes), la clase de objetos es la
raz de la jerarqua de clase Java. Aunque
el uso de la palabra en dos sentidos puede ser confusa, por lo general
uno debe entender la palabra "objeto" en el sentido de
"Ejemplo", a menos que la palabra "objeto" se capitalizan.
Nosotros decimos que <an instance> "es" <a class>. Algunos escritores
dicen que una "es-una" relacin existente entre
una instancia y su clase. Por ejemplo, mi Ford es un automvil.
OBJETO estado y el comportamiento
Grady Booch, un conocido escritor sobre el tema de la programacin OO,
ha definido como un objeto
algo "que ha estado, comportamiento, y la identidad." En otras palabras,
un objeto tiene caractersticas (que puede
cambiar con el tiempo), un objeto puede realizar ciertas acciones
preespecificados, y un objeto nos proporciona una forma de
se refieren a ella.
El estado de un objeto es proporcionada por variables. Como los valores
de las variables cambio, el estado del objeto
cambios. En cualquier punto en el tiempo, los valores de las variables
de la instancia aportar su estado. Por ejemplo, la velocidad
de mi Ford vara con el tiempo. En cualquier momento, el estado de mi
Ford incluye la velocidad a la que se
actualmente en movimiento.
El comportamiento de los objetos es proporcionado por los mtodos. Un
mtodo es un procedimiento de programacin. En el caso de mi
Ford, el acelerar () a mi mtodo permite Ford para cambiar de velocidad.
En el mundo que nos rodea, observamos que
diferentes miembros de la misma clase se comportan de manera similar, es
fcil distinguir un perro de un gato por la forma en que el
mover los animales individuales. Del mismo modo, esperamos que
diferentes instancias de la misma clase Java que se comportan de manera
similar, a fin de
mtodos son definidos por los procedimientos en la clase, no en los
casos individuales. La clase de automviles se
tienen la definicin de acelerar () mtodo, y cualquier instancia de
automviles se comportarn
Del mismo modo, cambiando la velocidad utilizando el mismo mtodo.

HERENCIA
Usted puede estar pensando que una de acelerar () mtodo puede no
funcionar para todas las instancias de la clase
Automvil. Puede ser la aceleracin de un Ferrari comportamiento debe
ser el modelo diferente de la aceleracin
comportamiento de un Kia. Si queremos el modelo de estas diferencias,
podemos tomar ventaja de la programacin OO
llamado paradigma de la herencia.
Una clase puede heredar de otro, en cuyo caso la nueva clase (llamada
subclase o clase subordinant
o un nio de clase) lleva todas las variables y los mtodos del ms alto
nivel de clase (llamado superclase o superior
clase o clase padre). Adems, el nio de clase puede agregar variables
de estado nico para el nio de clase, y aadir
mtodos de comportamiento nicas para el nio de clase. Adems, el nio
de clase puede invalidar los mtodos de la clase padre
con el fin de dar al nio un comportamiento diferente clase, aunque el
nombre de la aplicacin del mtodo de comportamiento
tiene el mismo nombre que el mtodo de la clase padre.
Este tipo de consideraciones llevan a desarrolladores de software a
crear una clase de jerarqua. El programador define
la ms general las variables de estado y el comportamiento en los
mtodos de nivel superior clases. Entonces, al escribir la subordinant
clases, el programador utiliza el Estado heredado y el comportamiento
cuando se ajusta, y aade las variables de estado, mtodos,
general y los mtodos para subordinant clases con el fin de aplicar las
diferencias entre el superior y
subordinant clases.
La belleza de esta tcnica es que las clases que se han escrito y
probado no cambian. Los programas informticos existentes
funcionalidad puede ser reutilizado. Cuando el programador requiere
nuevas funciones en una clase, el programador puede heredar
a partir de una existente, prueba de clase, y escribir un nuevo software
simplemente para cumplir los nuevos requisitos.
Si uno decide a acelerar la aplicacin de la () mtodo diferente para
diferentes automviles, una
que escribir la clase padre de automviles y, a continuacin, han
subordinant heredar de las clases de automviles.
En nuestro ejemplo, es posible que varias clases de diseo a heredar de
automviles, una clase llamada EconomyCar,
una clase llamada FamilyCar, y una clase llamada SportsCar. Cada una de
estas clases subordinant heredar
acelerar la () mtodo de la clase de automviles, y podra anular la
heredado acelerar ()
mtodo para cambiar el comportamiento de la aceleracin de las
instancias de la clase subordinant. Si una clase subordinant no
sobre el mtodo de la clase superior, las instancias de la clase
subordinant responder a la justa como mtodo
instancias de la clase superior hacer. Si mi Ford "es" una FamilyCar, mi
Ford tambin "es" un automvil, porque
FamilyCar hereda de automviles.
Instancia y variables estticas y mtodos
Un toque de complejidad es que algunos informacin de estado y de
algunos comportamientos pertenecen a la clase, mientras que otros
pertenecen a los casos de una clase. Por ejemplo, queremos mantener la
velocidad de cada uno de automviles como parte de

el estado de cada coche (en el estado de cada caso). Por otra parte,
queremos mantener una
de contar el nmero total de automviles como parte del estado de la
clase de automviles. Parece natural
velocidad que debera estar asociada con un coche particular, pero
necesitamos un lugar central para realizar un seguimiento del total de
nmero de automviles.
Tal vez estamos estirando la analoga un poco, pero imaginar un Ford en
la carretera. Tiene una velocidad que puede
medida, pero despus de la Ford sale de la fbrica, no hay manera fcil
para la Ford que se le mantenga al corriente de la total
nmero de automviles que se han construido. Si queremos saber cuntos
automviles se han
construido, debemos volver a la fbrica y conseguir la cuenta. La
fbrica es la clase.
Variables como la velocidad, que representan el estado de una instancia
de una clase, se denominan variables de instancia.
Variables como contar, que son mantenidos por la propia clase, se
denominan variables static. La palabra static
significa muchas cosas en ciencias de la computacin, y este uso de la
palabra esttica puede ser confuso. Otros idiomas etiqueta
la misma idea con un nombre diferente, por ejemplo, Visual Basic
llamadas variables de este tipo "compartidos" variables,
porque son compartidos por todas las instancias de una clase. Ese plazo
puede ser ms til para aprender, de modo que cuando vea
"Esttico", piensa a s mismo "compartido", o "clase".
Del mismo modo, los mtodos pueden ser mtodos de instancia o mtodos.
Si dos diferentes instancias de una clase tanto
llamar al mtodo de instancia acelerar (), ser como si hubiera dos
copias de ese mtodo, y
cada instancia tiene su propio. (En realidad, no habr dos copias del
cdigo, pero cada caso tendr su propio
"Pila" para las variables locales, que se mantendr la ejecucin de las
dos llamadas por separado, como si el cdigo existe en dos
lugares.) Por otra parte, si dos diferentes instancias de una clase
llamada el mtodo getAutomobileCount (),
los dos casos va a utilizar exactamente el mismo cdigo, porque slo hay
una copia, y que es compartida.
Variables y mtodos siempre sern variables de instancia y los mtodos,
a menos que especficamente les etiqueta
esttica. Si la etiqueta de una variable o mtodo esttico, la variable
o mtodo slo existen a nivel de la
clase, y se repartirn entre los casos.
A continuacin se muestra el ejemplo del Automvil de clase. Observe que
no hay ningn mtodo principal en el Automvil
clase. Esta clase no puede ser ejecutado directamente. Si tuviramos que
aadir un pblico principal mtodo, la clase podra ser ejecutado,
y cualquiera que sea el principal mtodo se codificaron para lograr que
se haga. Sin embargo, esta Automvil
clase est destinada a ser una "fbrica" de automviles para crear
objetos para su uso por otros programas y clases,
en lugar de ser un programa que se va a ejecutar por s mismo. Usted
puede pensar en la clase de automviles como la creacin de un nuevo
datos
tipo de automviles.
Anuncio tambin que en la clase de automviles hay un mtodo llamado de

automviles, el nombre de la
mtodo es el mismo que el nombre de la clase. El mtodo llamado de
automviles es el constructor de la clase.
Siempre que otro programa necesita un ejemplo de un automvil, el otro
programa que utilice la nueva palabra clave
a peticin de un nuevo automvil. Podemos decir desde el constructor de
automviles que el constructor
espera que cuatro parmetros cada vez que un nuevo automvil es
solicitada; se trata de la marca, el modelo, ao,
y el caballo de fuerza. Los dos primeros parmetros son valores de
cadena, y los dos ltimos son ints.
Cuando otro programa pide un ejemplo de un automvil, el constructor va
a crear un
Automvil objeto y volver al otro programa una referencia a los nuevos
automviles. Una referencia es una
direccin. El otro programa puede utilizar la referencia a la creacin
del nuevo AutoMobile objeto de manipular la misma.

La clase AutomobileFactory se pueden ejecutar directamente, porque tiene


un mtodo principal codificados en
la forma estndar. El principal mtodo declara tres variables que ser de
tipo de automviles ( "el anuncio puede
declarar varias variables del mismo tipo en una sola lnea, como lo
hicimos aqu) y, a continuacin, crea tres Automvil
objetos mediante el uso de la nueva palabra clave para invocar el
constructor de automviles de la clase tres
veces.
El primer println declaracin pide el mtodo getCount () especificando
el nombre de la clase
Automviles, seguido por un punto (perodo), seguido por el nombre del
mtodo getCount (). El getCount ()
mtodo devolver el nmero 3, porque cada vez que el constructor de
automviles de la clase genera un nuevo
Automvil, que sus incrementos de contar variable esttica.
Por ltimo, los tres println declaraciones en la impresin final de un
texto de representacin de cada automvil. Tal
uso de un nombre del objeto, como la economa, dentro de println causas
de la JVM para usar el toString () mtodo
de la clase. Cuando eso suceda aqu, el resultado en la pantalla es la
siguiente:
3 Automviles
2006 Kia Rio
2002 VW Passat
2005 Ford Mustang

Herencia
OO programacin hace fcil agregar la funcionalidad de software sin
reescribir el cdigo de una ya ha
escrito y probado. Supongamos que queremos aadir las distinciones entre
tipos de automviles. Un Ferrari puede ir
mucho ms rpido que un Kia, a fin de acelerar la () el mtodo debe ser
diferente, y tal vez otros comportamientos
tambin debera ser diferente para automviles tan diferentes.
Podemos aadir una nueva clase llamada SportsCar que se heredan de
automviles, y podemos dar la
SportsCar una clase diferente de acelerar () mtodo. Aqu est la clase
Java para SportsCar:

El SportsCar clase extiende la clase de automviles, lo que hereda de


SportsCar
Automvil. Cualquier instancia de un SportsCar ser tambin un
automvil, y salvo que existan
diferencias entre el cdigo de SportsCar y el cdigo para la industria
del automvil, un ejemplo de un SportsCar
tendr exactamente el mismo estado y el comportamiento de variables como
cualquier instancia de la clase de automviles.
El SportsCar clase tambin debe tener un constructor; se llama
SportsCar. El constructor de
SportsCar simplemente utiliza el constructor de automviles, la
superclase, mediante el uso de la palabra clave super a
pasar los mismos valores de marca, modelo, ao, y el poder para el
constructor de automviles de la clase.
La nica diferencia entre los casos de SportsCar y los casos de
automviles ser la
comportamiento proporcionada por el acelerar () mtodo. En el caso de un
automvil, la velocidad mxima se
ser de 70, pero en el caso de un SportsCar, la velocidad mxima ser
150. Nosotros decimos que la subclase SportsCar
anula el acelerar () mtodo heredado de la superclase de automviles.
Todo lo dems que es cierto acerca de un objeto de automviles se aplica
a un objeto SportsCar.

Todos se han variables de instancia para almacenar marca, modelo, ao,


caballos de fuerza y velocidad. Creacin de un nuevo
Automvil o una nueva SportsCar se incremento el nmero de automviles
que mantiene la
Automvil clase.
No tiene que cambiar cualquiera de nuestros cdigo existente para
mejorar nuestro trabajo para el tratamiento de automviles deportivos de
diferente
otros automviles!
Polimorfismo
La palabra polimorfismo significa "muchas formas". Cuando una subclase
anula un mtodo de una clase superior, el
comportamiento del mtodo depender de que tipo de objeto se utiliza en
el programa, un ejemplo de la
clase superior o una instancia de la subclase. Esta caracterstica de la
programacin OO se llama polimorfismo,
y es una potente caracterstica del enfoque OO.
Vamos a aadir algunas lneas a nuestro AutomobileFactory clase para
establecer la velocidad de un coche familiar a 120 y
establece la velocidad de un coche deportivo a 120. Mirando hacia atrs
en la acelerar () mtodo de la clase de automviles,
ver que la velocidad mxima para una instancia de la clase de
automviles es de 70. Que comparar con el
acelerar () mtodo para la clase SportsCar, la velocidad mxima para un
SportsCar es de 150.
Cuando pedimos la misma acelerar () un mtodo de instancia de
automviles y un ejemplo de
SportsCar, los resultados son diferentes. El Automvil velocidades de
hasta 70, y el SportsCar velocidades de hasta
120. Para mostrar esto, aadir cdigo a la clase AutomobileFactory:

Esta ser la nueva salida:

Polimorfismo nos permite escribir programas de manera ms general.


Podemos hacer referencia a la clase superior
que escribir programas, y si el objeto utilizado por el programa pasa a
pertenecer a una subclase de la superior
clase, los mtodos en la subclase que anular los correspondientes
mtodos de la clase superior asegurarse de que
mtodos adecuados para el caso concreto ser llamado. Esta es otra forma
en que la programacin OO
reduce la cantidad de cdigo que debe ser escrito y probado, y tambin
promueve la reutilizacin de cdigo existente en los nuevos
aplicaciones.
INTERFACES
En Java, podemos tambin especificar una interfaz para hacer cumplir un
conjunto comn de los comportamientos entre las diferentes clases.
Por ejemplo, pensar en el problema de la clasificacin de un grupo de
objetos de automviles. Cmo debe Automviles
ser ordenada? Por ao? Alfabticamente por hacer? Por caballo de fuerza?
Este problema se plantea con frecuencia cuando estamos
trabajo con objetos, de modo que el lenguaje Java una interfaz
especifica que toda nueva clase puede aplicar con el fin
para facilitar la clasificacin de los casos de la nueva clase.
Una interfaz consiste de un mtodo o ms firmas, pero no contiene ningn
cdigo de la aplicacin de cualquier
de los mtodos. (Una interfaz puede incluir constantes, as como el
mtodo de firmas, pero nos centraremos en los mtodos.)
Un mtodo de firma es como la primera lnea de un mtodo de la firma se
especifica lo que el mtodo de retorno,
el nombre del mtodo, y qu argumentos el mtodo de espera cuando se
llama.
Por ejemplo, Java proporciona la interfaz comparables, comparables y de
la interfaz especifica un nico
mtodo llamado compareTo (). El compareTo () espera que el mtodo de un
objeto como un argumento (el objeto con
que comparar la primera instancia) y devuelve un int. El valor de la int
devuelto ser 0 si los dos
objetos que se comparan son iguales, -1 si el primer objeto es "menor"
(debe ser ordenado en primer lugar), y 1 si la primera
objeto es "ms grande" (debe ser ordenada por segundo).
Podemos aplicar la interfaz comparable en nuestra clase de automviles
mediante la adicin de este cdigo para nuestra clase
Automvil:

La nueva primera lnea de automviles de nuestra clase ahora declara que


la clase de automviles pondr en prctica
la interfaz comparables. La sintaxis <Automobile> dice que slo ser
comparar un automvil
objeto con otro automvil. Si, por algn error de programacin, nuestro
programa trata de comparar una
Automvil objeto con un termostato objeto, la JVM generar un error.
El nuevo compareTo () implementa el mtodo de comparables de interfaz
para la clase de automviles.
Hemos tomado un atajo que aqu se aprovecha de la toString () mtodo que
ya tenemos para
Automvil. La frase this.toString () devolver un objeto String que
representa este caso
de un automvil. La palabra clave de este siempre hace referencia al
caso particular en s. La cadena
sern regres de esta forma:
VW Passat 2002
El ao ir seguido de la marca y el modelo del automvil. Del mismo
modo, la frase
car.toString () devolver una cadena en representacin de los otros
automviles, como este:
Kia Rio 2006
La cadena tiene una clase compareTo () mtodo que las rdenes de Cuerdas
"ASCIIbetical" orden, que se
como el orden alfabtico, salvo que sigue la codificacin de los valores
ASCII de caracteres. En ASCII las letras son
codificados en orden alfabtico, pero todas las letras maysculas vienen
antes de cualquiera de las minsculas y dgitos y
se incluyen smbolos, as como cartas. Para nuestros propsitos de
ordenar Automviles, pensamos que la
toString () la representacin de automviles ordenados en orden
ASCIIbetical estar bien. Mayores
los coches se orden en primer lugar, y entre los automviles de ese
mismo ao, los coches se ordenarn ASCIIbetically por hacer y
modelo.
La interfaz es similar a la idea de una clase, en una interfaz que crea
un nuevo tipo de datos. Cundo
la clase de automviles implementa la interfaz comparables, los casos de
automviles tambin se puede
tratados como casos comparables. As como un buen diseo de una
jerarqua de clase puede reducir la programacin y la
mejorar la fiabilidad, el buen diseo de la interfaz tambin puede.
Por ejemplo, el tipo () mtodo de la clase Java Colecciones de listas de
tipo comparables
objetos. Nuestra clase implementa Automvil comparables, la cadena Java
implementa la clase comparables,
Fecha de Java implementa la clase comparables, etc Una especie () mtodo
de trabajo para cualquier grupo de objetos
cuya clase implementa comparables. Que por s solo es un gran ejemplo de
reutilizacin de cdigo.
Es fcil de disear y utilizar su propio interfaz, tambin. Sin embargo,
en este breve captulo no vamos a discutir
ese tema.
GESTION DE ERRORES
Java utiliza excepciones para representar a las condiciones de error.
Excepcin es en realidad una clase en Java, y cuando un programa crea

una excepcin, que crea una nueva


objeto, que es una instancia de la clase de excepcin. Una excepcin
objeto puede tener informacin sobre lo que
sali mal, por lo general incluye un mensaje de error, y un "seguimiento
de la pila" que muestra que cre el mtodo de error.
Despus de haber creado un objeto de excepcin, cuando algo va mal, el
programa "lanza" la excepcin
utilizando la palabra clave tirar. La JVM se imprimir un mensaje de
error y detener la ejecucin cuando se lanza un programa de
una excepcin, a menos que el programador ha proporcionado el cdigo
para "capturar" la excepcin y manejar el error
condicin en el programa. Este enfoque de manejo de errores de programa
que se llama "excepcin de manipulacin" por obvias
razones, y es una idea relativamente moderna.
Una de las ventajas de los errores de manipulacin de esta manera es que
el cdigo para manejar condiciones de error ser segregado en
bloques de cdigo independiente de la lgica principal del programa.
Esto hace que sea mucho ms fcil seguir la intencin de la
programador, tanto en la lgica principal y en el manejo de errores de
cdigo.
Java ofrece una gran variedad de subclases de excepcin a fin de que
diferentes problemas en diferentes clases
Excepcin de objetos arrojados. Algunos ejemplos incluyen
FileNotFoundException,
NullPointerException, y NumberFormatException.
Java reconoce dos tipos de excepciones, controlados y sin control. Los
nombres provienen de lo que el Java
compilador no con ellos. El compilador "los controles de" adecuado
manejo de excepciones comprobado, pero no
no para comprobar la manipulacin de sin excepciones.
Un sin excepcin representa un error que probablemente es demasiado
grave para una aplicacin de corregir.
Un ejemplo es el NullPointerException, que se produce cuando el programa
intenta acceder a una variable
que debe contener una referencia a un objeto, pero que contiene en lugar
nula. El compilador se da por supuesto que tales
una excepcin que el programa para terminar con una condicin de error,
por lo que no se compruebe que la
programa de cdigo para manejar que la propia condicin de error.
A excepcin comprobado como FileNotFoundException representa una
condicin de error a partir de la cual
el programa potencialmente podran recuperar. En el caso de
FileNotFoundException, por ejemplo, el
programa podra pronto el operador de un nuevo nombre de archivo y
vuelve a intentarlo. Si el compilador reconoce que una
mtodo podra verificarse un encuentro excepcional, el compilador ser
necesario que el mtodo de presentar una
manejador de excepcin o que declarar con su propia lanza declaracin
que pueda generar el propio comprobado
Excepcin.
La forma de aadir manejo de excepciones a un programa Java es el
programa de adjuntar las declaraciones que pudieran generar
una excepcin dentro de un bloque try. Un bloque try comienza con la
palabra clave tratar de abrir un cors rizado.
Al final del cdigo est incluido en el bloque try es un estrecho cors
rizado. Inmediatamente despus del bloque try

ser uno o ms bloques de captura. Un bloque catch contiene el cdigo


para manejar el error.
Volvamos a nuestra clase de automviles y sus acelerar () mtodo. En
lugar de limitarse a fijar el
velocidad de los automviles a su valor mximo cuando el argumento para
acelerar la () el mtodo es demasiado
grandes, podemos tener la clase de automviles generar una subclase
especial de excepcin proceda a esta
solicitud. Aqu est el cdigo para nuestra nueva clase
ExcessiveSpeedException:
Public class ExcessiveSpeedException extiende Exception (
ExcessiveSpeedException (uno de Automviles) (
super ( "Nuevo velocidad supera la velocidad mxima de"
A.toString + ());
)
)
Nuestro ExcessiveSpeedException hereda de excepcin. El
ExcessiveSpeedException
constructor de automviles espera un objeto como un argumento. Para
aprovechar el mensaje atributo heredado
de la clase superior, que incorpora el toString () descripcin de los
automviles en el mensaje
que pasa al constructor de la clase superior de excepcin.
Ahora podemos reescribir el acelerar () mtodo de automviles de la
siguiente manera:
public void acelerar (el doble de newSpeed)
lanza ExcessiveSpeedException (
if (newSpeed> 70.)
lanzar nuevos ExcessiveSpeedException (este);
velocidad = newSpeed;
)
La referencia a lo que significa que el caso concreto de automvil, que
genera la
ExcessiveSpeedException se pasa al constructor ExcessiveSpeedException.
Aviso
que el mtodo de cabecera para acelerar () incluye ahora una declaracin
de que el mtodo puede lanzar una
ExcessiveSpeedException. Si se olvida de incluir la declaracin, el
compilador requerir una
declaracin cuando se ve que algunos dentro de la declaracin arroja un
mtodo ExcessiveSpeedException.
Por ltimo, anuncio que ya no requieren una clusula ms si despus de
la declaracin. Una vez que un mtodo lanza una
excepcin, la ejecucin se detiene, salvo por cualquier cdigo est
listo para la captura de la excepcin. Por lo tanto, no
ya ms necesidad de asegurar dos no se superponen caminos de ejecucin
en respuesta a la prueba si en la declaracin.
Podemos reescribir la AutomobileFactory clase para manejar la posible
aparicin de un
ExcessiveSpeedException.

En este caso, el bloque catch informes simplemente el error, y el


programa contina. Con otros errores, la
bloque catch puede tratar de corregir el problema, pregunte al usuario
por una decisin o, simplemente, terminar el programa de
llamando System.exit ().
La salida de esta versin de AutomobileFactory tiene este aspecto:

Cuando AutomobileFactory intenta acelerar el VW tambin a una gran


velocidad, el automvil de clase
lanza una ExcessiveSpeedException que se detiene la ejecucin de
acelerar () y transfiere el control
al bloque catch. El bloque catch informes el problema por el mensaje de
impresin atributo de la excepcin
objeto. Cuando el bloque catch termina, el programa contina, pero las
velocidades de ambos automviles siguen siendo
0.0, porque el camino de la ejecucin no establece la velocidad de un
bien.
No puede haber ms de un bloque catch, de hecho, usted puede tener
varios. Cada uno puede especificar un particular
clase de excepcin para manejar. Esto es importante para separar el
cdigo para la manipulacin de diferentes tipos de problemas.
Si un mtodo lanza una FileNotFoundException, puede ser fcil de
solucionar pidiendo al operador que introduzca el
nombre de archivo nuevo. Por otro lado, si uno lee el archivo de la
falla y el mtodo arroja una IOException, puede
ser difcil para el programa de recuperacin. En el primer caso, el
bloque de captura "en soldado", y en el segundo caso
las capturas pueden simplemente bloquear el informe de error y, a
continuacin, llamar a System.exit ().
Cuando ms de un bloque catch sigue un bloque try, la captura bloques
debe ser ordenada de tal forma que lowerlevel
Excepcin producirse antes de las clases de nivel superior, ms general,
las clases de excepciones. Cuando un mtodo
lanza una excepcin, el intentar bloquear las bsquedas en la lista de
bloques de captura hasta que encuentra una coincidencia entre la
Clase de excepcin que fue arrojada y la clase de excepcin declarado en
el bloque catch. El primer aceptable
partido ser invocado para manejar el error. Si el primer bloque catch

especifica los objetos de la clase de excepcin, la


ms general de clase, el primer bloque catch se encargar de todas las
excepciones, independientemente de cualquier otra captura
bloques puede haber. Por lo tanto, si quiere un programa para tratar de
recuperarse de una FileNotFoundException y
rescindir en cualquier otro fallo, el bloque catch para el
FileNotFoundException debera venir antes de la
bloque catch para la clase de excepcin.
Hay una opcin ms. Despus de que el bloque try y captura todos los
bloques, un programador puede aadir un ltimo bloque.
Un ltimo bloque contiene cdigo que siempre se ejecutar, si se produce
un error o no. Un ltimo bloque es
un buen lugar para poner general de "limpieza" de cdigo, al igual que
la declaracin para cerrar una base de datos.
Aqu est la sintaxis para el try / captura / finalmente la
construccin:

Java error de manipulacin de mecanismo es una de sus grandes


fortalezas. Manejo de excepciones con try /
captura / finalmente es muy slido y lleva a la muy soportable cdigo.
Desde uno puede aadir fcilmente aplicaciones especficas
excepcin a las clases de apoyo del propio trabajo, este enfoque tambin
es muy ampliable.
De entrada y salida
Programas de Java leer y escribir datos por medio de los arroyos. Una
secuencia es una serie de elementos de datos que fluye
de algunos dispositivo de entrada al programa, o desde el programa a
algunos dispositivo de salida. El enfoque general para
de entrada y salida (I / O) de un programa Java es:
Abra el flujo de
Si bien hay datos a leer o escribir
leer y procesar los datos, o escribir datos
)

Cerrar el flujo de
El arroyo de las clases I / O se agrupan en un paquete llamado Java
java.io. Un paquete es slo uno
relacionados con la recogida de clases. Uno puede crear los paquetes de
las propias clases, pero no ser el que se especifica que
en esta breve introduccin a la lengua. La razn de mencionar el nombre
del paquete aqu es que un programador
debe importar un paquete con el fin de tomar ventaja de las clases
dentro de ella. Con el fin de utilizar el flujo de las clases
vamos a discutir pronto, su programa debe tener una declaracin en el
principio, incluso antes de la clase
declaracin, que dice:
importacin java.io. *;
El asterisco significa la importacin de todas las clases en el paquete.
Si el programador quiere slo uno de los
clases, el programador puede sustituir el nombre de la clase para el
asterisco. Por lo general, un tipo simplemente como la lnea que
que han demostrado.
El flujo de clases en Java se dividen en dos grandes categoras:
Reader / Writer y flujo de entrada /
Flujo de salida. Si la clase est en el lector / escritor de la
categora, es un arroyo de la lectura y la escritura de caracteres
datos-letras, nmeros y smbolos. Si la clase est en el flujo de
entrada / flujo de salida categora,
es un arroyo de la lectura y la escritura-octetos de datos en bruto, 8
bits a la vez.
Los estudiantes a veces se confunde pensando en la diferencia entre los
datos de caracteres y bytes. No se
octetos utilizados para codificar los caracteres? S que son. De hecho,
se podra obtener, junto con slo el flujo de entrada /
Clases de flujo de salida, y dejar que los programas se encargar de
hacer sentido de los datos mediante la conversin de los datos que
personajes que, cuando era apropiado.
Sin embargo, a menudo las fuentes de datos consisten en datos de
caracteres, y es muy conveniente disponer de I / O para las clases
que la situacin comn. Si la informacin existe en forma de caracteres,
un Reader / Writer interpretar
la informacin correcta y devolver un conjunto de caracteres para el
programa. Esto ahorra el tener que programador
escribir un tedioso conversin que de otro modo sera necesario con
frecuencia.
Si la informacin existe en alguna otra forma de caracteres, tales como
nmeros binarios en entero o floatingpoint
formato, como en un archivo de imagen, entonces no tiene sentido para
interpretar los patrones de bits como caracteres. En ese
caso, el programador debe utilizar el flujo de entrada / flujo de salida
clases, que simplemente la transferencia
bytes. A continuacin, el programa se encargar de interpretar
correctamente los bytes.
Otra situacin exige el uso de flujo de entrada / flujo de salida las
clases, tambin. Esto es cuando un
no le importa lo que los datos representan. Este sera el caso, por
ejemplo, cuando la tarea consiste en copiar un archivo. El
programa de hacer la copia no necesita saber cul es el contenido del
archivo de medios, sino slo a las necesidades de copia
cada byte en un nuevo archivo. En ese caso, utilizando el flujo de

entrada / flujo de salida de clases en lugar de la


Reader / Writer clases tiene sentido, incluso si el archivo a ser
copiado se compone de caracteres, porque la
Flujo de entrada / flujo de salida clases ser ms eficiente el paso de
traducir las pautas poco a los personajes
se saltarse.
Hay 50 clases de java.io, y vamos a describir slo unos pocos aqu. Para
leer un archivo de datos de carcter,
se podra usar un BufferedReader "envuelto alrededor de" un FileReader.
El Java I / O el diseo es muy flexible,
y este es un buen ejemplo de ello. A FileReader lee caracteres de un
archivo, y por la envoltura
FileReader con un BufferedReader, el I / O se lograr de manera ms
eficiente mediante la lectura de un grupo
de caracteres a la vez. El BufferedReader tambin proporciona un mtodo
llamado readline (), que permite a la
programa para leer una lnea en un momento de un archivo en una variable
de cadena. Sin la BufferedReader, un
FileReader slo tiene mtodos para leer los caracteres.
Aqu est un pequeo programa para leer un archivo de datos de carcter
y mostrarlo en la pantalla:

Este programa comprueba los argumentos de lnea de comandos en la matriz


de cadenas llamado args para asegurarse de que el
el usuario siempre un parmetro para el nombre del archivo. Si el
usuario siempre exactamente un argumento, el programa asume que este
argumento es el nombre de un archivo, y los intentos de abrir el archivo
usando un BufferedReader dentro de un bloque try.
Si todo va bien, el programa entra en un bucle while llamando a la
readline () mtodo de la
BufferedReader para leer una lnea del archivo a la vez en la variable
de la cadena de lnea y, a continuacin, mostrar la
texto usando el println () mtodo. El bucle se dar por terminado cuando
readline () devuelve un valor nulo, lo que es
la seal de que el BufferedReader ha encontrado al final del archivo
(EOF).
El programa utiliza el ltimo bloque para cerrar el archivo. Desde el
close () mtodo propio
lanzar una IOException, la llamada a close () en el ltimo bloque
tambin debe ser rodeada por
un bloque try. Si se produce un error aqu, sin embargo, este programa
simplemente hace caso omiso de ella; la captura bloque est vaca
de cualquier cdigo.
Nuestro segundo ejemplo se lee un archivo por la simple finalidad de
copiar los bits en el archivo a un nuevo archivo. Por esta
propsito utilizamos un BufferedInputStream envuelto alrededor de un
FileInputStream. El programa de copias
los bits, literalmente, un byte a la vez. Este enfoque es muy eficaz
porque no hay generales de la traduccin
los patrones de bits en caracteres.

Cuando el programa abre la BufferedOutputStream, el nuevo se abre un


FileOutputStream
archivo existente para sobrescribir o, si el archivo de salida no
existe, crea un nuevo archivo de salida para la escritura. Hay una
segundo parmetro en el constructor de la FileOutputStream lo que
permitira un programa para anexar a
un archivo existente, pero no hemos utilizado aqu.
Con el read () mtodo de la BufferedInputStream, ya sea un byte de datos
se devuelve, o, si el
programa de encuentros de la EOF, un binario se devuelve -1. Mientras el
read () sigue a regresar bytes, el
programa llama a escribir () para copiar los datos. Aunque puede ver los
octetos siendo ledo y escrito, la transferencia

es mucho ms eficiente que usted podra pensar, porque el flujo de


entrada y el flujo de salida se buffer.
ESCNER
A menudo tenemos que leer la informacin del usuario del programa. Es
posible que pronto el usuario, por ejemplo,
preguntar a ellos qu tipo de vehculo que conducen. Podemos pedir a la
cuestin de que el usuario mostrando la cuestin utilizando
System.out.println (). Nos han mostrado muchos ejemplos de visualizacin
de informacin en la pantalla.
Java proporciona una clase llamada escner que hace que sea fcil de
leer informacin desde el teclado en la
programa. Para crear un objeto de escner para la lectura desde el
teclado, simplemente pasar la entrada estndar "stream"
al constructor de un nuevo escner. Por ejemplo, aqu est un fragmento
de cdigo para crear un nuevo escner para
lectura desde el teclado y, a continuacin, utilizar el escner para
leer un nmero de coma flotante:
...
Lector de escner = new Scanner (System.in);
/ / Obtener la entrada
System.out.print ( "Introduzca el equilibrio:");
doble equilibrio scanner.nextDouble = ();
...
El escner de clase tiene muchos mtodos, y usted debera consultar la
documentacin de la API Java para ver qu
son, y qu opciones tiene.
Tambin puede utilizar un escner para leer de un archivo. Para asociar
un escner con un archivo de texto, slo tiene que pasar
FileReader un objeto al constructor de escner:
sc = new Scanner (nuevo FileReader (myfile.txt));
Para leer lneas de texto, puede utilizar el nextLine () mtodo de
transferencia del escner a una lnea de texto
en una variable de cadena. Tambin puede utilizar el hasNextLine ()
mtodo de prueba para ver si hay
algo para leer. He aqu un fragmento de cdigo al bucle, la lectura de
texto para su transformacin en una cadena llamada
lineOfData.

Cuando el programa llega a la EOF, el hasNextLine () mtodo de retorno


falsas, y el programa
salir del bucle while.
PRINTWRITER
El PrintWriter es otra muy conveniente I / O de clase, sino que hace que
la escritura de texto en un archivo tan fcil como escribir
texto a la pantalla. Para crear un PrintWriter que se asocia con un
archivo, simplemente pasar el nombre de la
archivo en el constructor. Entonces usted puede escribir en el fichero
simplemente utilizando el print () y println () mtodos que

han aprendido a usar para escribir a la pantalla.


A PrintWriter se puede utilizar con cualquier secuencia de salida, pero
un uso muy comn es que sea muy fcil
escribir texto con formato a un archivo. Aqu est un sencillo programa
que lee lneas de texto escrito en el teclado, y escribe
el mismo texto en un archivo con un PrintWriter. Uso de la println ()
mtodo, este programa aade una lnea
nmero en la parte delantera de cada lnea que escribe la lnea en el
archivo.

RESUMEN
Java es un moderno orientado a objetos lenguaje de programacin. En este
captulo se discuti la forma de compilar y ejecutar
Programas Java. Hablamos de la "primitiva" en los tipos de datos Java,
as como los utilizados con frecuencia "de referencia" tipos
incluida la matriz de cadenas y tipos. Nos explic el uso de estructuras
de control selectivo para la ejecucin de cdigo
y la iteracin. Estas declaraciones incluyen-si la otra persona, para,
al mismo tiempo, hacer-al mismo tiempo, y cambiar las declaraciones.
Java tiene la ventaja de OO concepto de clases, y la consiguiente
principios de la herencia, encapsulacin,
y polimorfismo. Un ejemplo de una clase se denomina un objeto, y los
objetos han estado y comportamiento. Clases de definir
tanto instancia y variables static, que se manifiestan el estado de un
objeto. Las clases tambin definir tanto instancia y
los mtodos estticos, que dotar a los objetos con sus comportamientos
caractersticos. Java tambin proporciona el concepto de una
interfaz, que permite aplicar un comportamiento similar entre las

diferentes clases.
Manejo de errores en Java se logra utilizando los objetos de excepcin.
Cuando se produce un error, un programa puede
lanzar una excepcin, que puede describir el problema. Las excepciones
pueden ser capturadas en la aplicacin
cuando el cdigo de generacin de la excepcin es encerrado en un bloque
try. Tras el bloque try puede ser mltiple
bloques de captura y finalmente un bloque. Bloques de captura puede
especificar que las subclases de excepcin que
se asa. Cdigo en un ltimo bloque siempre se ejecutar, si se produce
un error en el bloque try o no.
Si la solicitud no una excepcin, la excepcin se propague a la JVM, que
manejar la excepcin de que la presentacin de informes y se da por
concluido el programa.
Entrada y salida se produce en Java utilizando los arroyos. Una
secuencia es una secuencia de elementos de datos. Los muchos tipos de
arroyos disponible en Java se pueden clasificar en Entrada /
OutputStreams, que manejar materias primas como datos binarios
bytes, y Reader / Writer arroyos que tengan en cuenta los datos de
carcter, y realizar automticamente la traduccin y
de codificaciones de caracteres. Por eficiencia, la buena prctica de
programacin es una recapitulacin base en el flujo de un objeto
el buffer de flujo para proporcionar eficiente de la memoria I / O.
El escner de clase en Java es una clase prctica de la lectura de texto
desde el teclado, un archivo, o de otro tipo de entrada.
La clase PrintWriter es otra clase de comodidad que facilita la tarea
comn de formato escrito
texto en un archivo.
REPASO DE PREGUNTAS
5.1 Escribir un programa Java que divide el nmero 74,3 y 12,6 por
informes el resultado de la divisin. Almacenar
el dividendo y divisor en el llamado dividendo de variables y divisor
antes de realizar la divisin.
Cul ser el tipo de estas variables? Cul ser el tipo de resultado?
Cul es el cociente?
5.2 Escribir un programa Java para calcular el rea de un crculo cuyo
radio es de 5. Por el valor de PI, el uso 3.14.
Ahora reescribir su programa para que utilice el valor exacto de PI como
una constante en
la clase de matemticas que viene con Java. Aqu es cmo utilizar la
clase de matemticas constante:
doble pi = Math.PI;
Cunto cuesta cambiar el resultado?
5.3 Escribir un programa Java que le pide al usuario para un nmero y, a
continuacin le dice al usuario si el nmero es
incluso un mltiplo de 5. Uso de escner para leer el nmero del
usuario, y usar el modulo operador
(%) Para decidir si el nmero es un mltiplo de 5.
5.4 Escribir un programa Java que pide un usuario para entrar en cinco
cuerdas, una a la vez. Que se guarde el Cuerdas
en una matriz de cadenas. Entonces tienes el programa de visualizacin
de las palabras en orden inverso. Para un uso, o una
al mismo tiempo, o hacer un bucle while para leer en las cuerdas, y otra
para, al mismo tiempo, o bucle while
para imprimir a cabo.

5.5 Escribir un programa Java que puede clasificar los vehculos en


funcin del nmero de ruedas, el vehculo ha.
Su programa debe pedir al usuario el nmero de ruedas en el vehculo y,
a continuacin, lea el nmero
en una variable int. Si el usuario dice que el vehculo haya 2 3
ruedas, el programa presentar un informe que se trata de un
moto, si tiene 4 ruedas el vehculo se etiqueta un "automvil o
camioneta," si tiene 6, 8, 10, 12, 14,
16, o 18 ruedas, ser clasificado como un camin. Cualquier otro nmero
de ruedas se inform como una
error. Utilice un switch para calcular la decisin.
5.6 Escribir una clase llamada Java de vehculos. La clase de vehculo,
tendr lugar los atributos de color, marca,
modelo, velocidad, nmero de ocupantes, y el nmero mximo de ocupantes.
La clase de vehculo, tambin
tiene una variable llamada vehicleCount que pueden ser utilizados para
realizar el seguimiento del nmero de vehculos en la
solicitud. El constructor de vehculos deben esperar valores de marca,
modelo, nmero mximo de
ocupantes, y el color, y que debe configurar la velocidad del vehculo a
cero, el nmero de ocupantes a 1, y
incrementar el nmero de vehculos cada vez que el constructor se llama.
Cada una de las instancia y variables static
deben tener un acceso (get) el mtodo que devolver el valor apropiado,
y todos, excepto el
variable deben vehicleCount tambin tienen un mutator (set) el mtodo
para que el valor puede ser modificado.
Tambin debe dar la clase de vehculo, un mtodo de instancia llamado
changeSpeed. El
changeSpeed mtodo debe esperar un valor de coma flotante para la nueva
velocidad, y debe devolver una
valor de coma flotante que representa la diferencia entre la nueva
velocidad y la velocidad anterior de la
vehculo. Incluir un public static void main (String [] args) mtodo que
crea algunos
vehculos, establece algunas velocidades, y lee algunos valores de las
variables, de modo que usted puede probar su cdigo mediante la puesta
en marcha
la clase de la lnea de comandos.
5,7 Skateboard Escribir una clase que hereda de vehculos. Anular el
changeSpeed mtodo para la
Skateboard clase, de modo que las instancias de la clase Skateboard
nunca puede exceder de 10 mph. Si un mayor
valor se suministra, el mtodo simplemente establece la velocidad de la
Skateboard a 10.
5.8 Escribir un bus clase que hereda de vehculos. Una instancia de la
clase de autobuses siempre debe tener una
conductor. En el constructor de un autobs, asegrese de que su cdigo
de espera y tiendas el nombre de la
conductor. Adems, la clase de autobuses deben tener acceso mutator y
mtodos para el retorno y la evolucin de la
nombre del conductor.
5.9 Para la clase de vehculos, aadir un mtodo de repostaje que espera
dos parmetros, y fuelQuantity
milesSinceLastFueling. Tambin aadir variables de instancia a la clase
de vehculo para totalMileage

y totalFuelConsumed. Adems, aadir un mtodo de acceso llamado


fuelEconomy que volver
el total de millas por galn del vehculo.
Qu hacer para que el mtodo de repostaje, cuando funciona
correctamente invocado en una instancia de
Skateboard? Escribir una clase llamada prueba ManyVehicles que crea una
gran variedad de
Vehculos, ejercicios de todos los mtodos que han creado, y los
controles para la correcta ejecucin. Trate de establecer la
una velocidad de Skateboard a 60, por ejemplo, o para repostar un
Skateboard. Compruebe que la economa de combustible
los clculos se estn llevando a cabo correctamente.
5,10 Escribir una clase de excepcin que se extiende y se llama
TooManyOccupantsException. Tener la
Mutator clase de vehculo para el nmero de ocupantes lanzar una
excepcin si el numberOfOccupants
superara el nmero mximo de ocupantes del vehculo. Qu necesidad de
cambio en su
ManyVehicles prueba de la clase?
5.11 Cambio ManyVehicles su clase para que lea de un archivo de texto
llamado Vehicles.txt las especificaciones
para los vehculos a crear. Utilice un BufferedReader o un escner para
leer el archivo. Uso de un
Escner es probablemente ms fcil en este caso. Aqu est una muestra
Vehicles.txt archivo. La primera palabra en una
lnea es el color, la segunda palabra en una lnea de la marca, la
tercera palabra es el modelo, y la cuarta palabra
es el nmero mximo de ocupantes:
roja Ford F-150 3
BMW 328i plata 4
MG azul bus 32
Chrysler oro PTCruiser 4
naranja WorldIndustries ProBoard 1
5,12 Escribir un programa Java que itera a travs de los nmeros enteros
de 1 a 20, calcular el cuadrado de cada
nmero y escribir la informacin a un archivo llamado squares.txt.
Utilice un PrintWriter para escribir la
archivo de los primeros 20 nmeros enteros y sus cuadrados. Tomar las
medidas necesarias para dos columnas con una lnea de la columna en las
partidas
la parte superior. Puede encontrar este fcil de hacer utilizando el
println () mtodo de la PrintWriter.

Você também pode gostar