viernes, 20 de junio de 2008

Correccion Miguel Mena 20_06

El desarrollo y ejecución de aplicaciones en Java exige que las herramientas para compilar (javac.exe) y ejecutar (java.exe) se encuentren accesibles. El ordenador, desde una ventana de comandos de MS-DOS, sólo es capaz de ejecutar los programas que se encuentran en los directorios indicados en la variable PATH del ordenador (o en el directorio activo). Si se desea compilar o ejecutar código en Java, el directorio donde se encuentran estos programas (java.exe y javac.exe) deberá encontrarse en el PATH. Tecleando PATH en una ventana de comandos de MS-DOS se muestran los nombres de directorios incluidos en dicha variable de entorno.

Java utiliza además una nueva variable de entorno denominada CLASSPATH, la cual determina dónde buscar tanto las clases o librerías de Java (el API de Java) como otras clases de usuario. A partir de la versión 1.1.4 del JDK no es necesario indicar esta variable, salvo que se desee añadir conjuntos de clases de usuario que no vengan con dicho JDK. La variable CLASSPATH puede incluir la ruta de directorios o ficheros *.zip o *.jar en los que se encuentren los ficheros *.class. En el caso de los ficheros *.zip hay que observar que los ficheros en él incluidos no deben estar comprimidos. En el caso de archivos *.jar existe una herramienta (jar.exe), incorporada en el JDK, que permite generar estos ficheros a partir de los archivos compilados *.class. Los ficheros *.jar son archivos comprimidos y por lo tanto ocupan menos espacio que los archivos *.class por separado o que el fichero *.zip equivalente.

Una forma general de indicar estas dos variables es crear un fichero batch de MS-DOS (*.bat)
donde se indiquen los valores de dichas variables. Cada vez que se abra una ventana de MS-DOS
será necesario ejecutar este fichero *.bat para asignar adecuadamente estos valores. Un posible
fichero llamado jdk117.bat, podría ser como sigue:

ESIISS: Aprenda Java como si estuviera en Primero página 4
set JAVAPATH=C:\jdk1.1.7
set PATH=.;%JAVAPATH%\bin;%PATH%
set CLASSPATH=.\;%JAVAPATH%\lib\classes.zip;%CLASSPATH%
lo cual sería válido en el caso de que el JDK estuviera situado en el directorio C:\jdk1.1.7.
Si no se desea tener que ejecutar este fichero cada vez que se abre una consola de MS-DOS es
necesario indicar estos cambios de forma “permanente”. La forma de hacerlo difiere entre Windows 95/98 y Windows NT. En Windows 95/98 es necesario modificar el fichero Autoexec.bat situado en C:\, añadiendo las líneas antes mencionadas. Una vez rearrancado el ordenador estarán presentes en cualquier consola de MS-DOS que se cree. La modificación al fichero Autoexec.bat en Windows 95/98 será la siguiente:

set JAVAPATH=C:\jdk1.1.7
set PATH=.;%JAVAPATH%\bin;%PATH%
set CLASSPATH=

donde en la tercera línea debe incluir la ruta de los ficheros donde están las clases de Java. En el
caso de utilizar Windows NT se añadirá la variable PATH en el cuadro de diálogo que se abre con
Start -> Settings -> Control Panel -> System -> Environment -> User Variables for NombreUsuario.

También es posible utilizar la opción –classpath en el momento de llamar al compilador javac.exe o al intérprete java.exe. En este caso los ficheros *.jar deben ponerse con el nombre completo en el CLASSPATH: no basta poner el PATH o directorio en el que se encuentra. Por ejemplo, si se desea compilar y ejecutar el fichero ContieneMain.java, y éste necesitara la librería de clases G:\MyProject\OtherClasses.jar, además de las incluidas en el CLASSPATH, la forma de
compilar y ejecutar sería:

javac -classpath .\;G:\MyProject\OtherClasses.jar ContieneMain.java
java -classpath .\;G:\MyProject\OtherClasses.jar ContieneMain

Se aconseja consultar la ayuda correspondiente a la versión que se esté utilizando, debido a que existen pequeñas variaciones entre las distintas versiones del JDK. Cuando un fichero filename.java se compila y en ese directorio existe ya un fichero filename.class, se comparan las fechas de los dos ficheros. Si el fichero filename.java es más antiguo que el filename.class no se produce un nuevo fichero filename.class. Esto sólo es válido para ficheros *.class que se corresponden con una clase public.

EL ENTORNO DE DESARROLLO DE JAVA

Existen distintos programas comerciales que permiten desarrollar código Java. La compañía Sun,
creadora de Java, distribuye gratuitamente el Java(tm) Development Kit (JDK). Se trata de un
conjunto de programas y librerías que permiten desarrollar, compilar y ejecutar programas en Java.
Incorpora además la posibilidad de ejecutar parcialmente el programa, deteniendo la ejecución en el
punto deseado y estudiando en cada momento el valor de cada una de las variables (con el
denominado Debugger). Cualquier programador con un mínimo de experiencia sabe que una parte
muy importante (muchas veces la mayor parte) del tiempo destinado a la elaboración de un
programa se destina a la detección y corrección de errores. Existe también una versión reducida del
JDK, denominada JRE (Java Runtime Environment) destinada únicamente a ejecutar código Java
(no permite compilar).
Los IDEs (Integrated Development Environment), tal y como su nombre indica, son entornos
de desarrollo integrados. En un mismo programa es posible escribir el código Java, compilarlo y
ejecutarlo sin tener que cambiar de aplicación. Algunos incluyen una herramienta para realizar
Debug gráficamente, frente a la versión que incorpora el JDK basada en la utilización de una
consola (denominada habitualmente ventana de comandos de MS-DOS, en Windows NT/95/98)
bastante difícil y pesada de utilizar. Estos entornos integrados permiten desarrollar las aplicaciones
de forma mucho más rápida, incorporando en muchos casos librerías con componentes ya
desarrollados, los cuales se incorporan al proyecto o programa. Como inconvenientes se pueden
señalar algunos fallos de compatibilidad entre plataformas, y ficheros resultantes de mayor tamaño
que los basados en clases estándar.
Capítulo 1: Introducción a Java página 3
1.2.1 El compilador de Java
Se trata de una de las herramientas de desarrollo incluidas en el JDK. Realiza un análisis de sintaxis
del código escrito en los ficheros fuente de Java (con extensión *.java). Si no encuentra errores en
el código genera los ficheros compilados (con extensión *.class). En otro caso muestra la línea o
líneas erróneas. En el JDK de Sun dicho compilador se llama javac.exe. Tiene numerosas opciones,
algunas de las cuales varían de una versión a otra. Se aconseja consultar la documentación de la
versión del JDK utilizada para obtener una información detallada de las distintas posibilidades.
1.2.2 La Java Virtual Machine
Tal y como se ha comentado al comienzo del capítulo, la existencia de distintos tipos de
procesadores y ordenadores llevó a los ingenieros de Sun a la conclusión de que era muy importante
conseguir un software que no dependiera del tipo de procesador utilizado. Se planteó la necesidad
de conseguir un código capaz de ejecutarse en cualquier tipo de máquina. Una vez compilado no
debería ser necesaria ninguna modificación por el hecho de cambiar de procesador o de ejecutarlo
en otra máquina. La clave consistió en desarrollar un código “neutro” el cual estuviera preparado
para ser ejecutado sobre una “máquina hipotética o virtual”, denominada Java Virtual Machine
(JVM). Es esta JVM quien interpreta este código neutro convirtiéndolo a código particular de la
CPU utilizada. Se evita tener que realizar un programa diferente para cada CPU o plataforma.
La JVM es el intérprete de Java. Ejecuta los “bytecodes” (ficheros compilados con extensión
*.class) creados por el compilador de Java (javac.exe). Tiene numerosas opciones entre las que
destaca la posibilidad de utilizar el denominado JIT (Just-In-Time Compiler), que puede mejorar
entre 10 y 20 veces la velocidad de ejecución de un programa.

Que es JAVA

Java 2 (antes llamado Java 1.2 o JDK 1.2) es la tercera versión importante del lenguaje de
programación Java.
No hay cambios conceptuales importantes respecto a Java 1.1 (en Java 1.1 sí los hubo
respecto a Java 1.0), sino extensiones y ampliaciones, lo cual hace que a muchos efectos –por
ejemplo, para esta introducción- sea casi lo mismo trabajar con Java 1.1 o con Java 1.2.
Los programas desarrollados en Java presentan diversas ventajas frente a los desarrollados en
otros lenguajes como C/C++. La ejecución de programas en Java tiene muchas posibilidades:
ejecución como aplicación independiente (Stand-alone Application), ejecución como applet,
ejecución como servlet, etc. Un applet es una aplicación especial que se ejecuta dentro de un
navegador o browser (por ejemplo Netscape Navigator o Internet Explorer) al cargar una página
HTML desde un servidor Web. El applet se descarga desde el servidor y no requiere instalación en
el ordenador donde se encuentra el browser. Un servlet es una aplicación sin interface gráfica que se
ejecuta en un servidor de Internet. La ejecución como aplicación independiente es análoga a los
programas desarrollados con otros lenguajes.
Además de incorporar la ejecución como Applet, Java permite fácilmente el desarrollo tanto
de arquitecturas cliente-servidor como de aplicaciones distribuidas, consistentes en crear
aplicaciones capaces de conectarse a otros ordenadores y ejecutar tareas en varios ordenadores
simultáneamente, repartiendo por lo tanto el trabajo. Aunque también otros lenguajes de programación
permiten crear aplicaciones de este tipo, Java incorpora en su propio API estas
funcionalidades.

Historia de JAVA

Java surgió en 1991 cuando un grupo de ingenieros de Sun Microsystems trataron de diseñar un
nuevo lenguaje de programación destinado a electrodomésticos. La reducida potencia de cálculo y
memoria de los electrodomésticos llevó a desarrollar un lenguaje sencillo capaz de generar código
de tamaño muy reducido.
Debido a la existencia de distintos tipos de CPUs y a los continuos cambios, era importante
conseguir una herramienta independiente del tipo de CPU utilizada. Desarrollaron un código
“neutro” que no dependía del tipo de electrodoméstico, el cual se ejecutaba sobre una “máquina
hipotética o virtual” denominada Java Virtual Machine (JVM). Era la JVM quien interpretaba el
código neutro convirtiéndolo a código particular de la CPU utilizada. Esto permitía lo que luego se
ha convertido en el principal lema del lenguaje: “Write Once, Run Everywhere”. A pesar de los
esfuerzos realizados por sus creadores, ninguna empresa de electrodomésticos se interesó por el
nuevo lenguaje.
Como lenguaje de programación para computadores, Java se introdujo a finales de 1995. La
clave fue la incorporación de un intérprete Java en la versión 2.0 del programa Netscape Navigator,
produciendo una verdadera revolución en Internet. Java 1.1 apareció a principios de 1997,
mejorando sustancialmente la primera versión del lenguaje. Java 1.2, más tarde rebautizado como
Java 2, nació a finales de 1998.
Al programar en Java no se parte de cero. Cualquier aplicación que se desarrolle “cuelga” (o
se apoya, según como se quiera ver) en un gran número de clases preexistentes. Algunas de ellas las
ha podido hacer el propio usuario, otras pueden ser comerciales, pero siempre hay un número muy
importante de clases que forman parte del propio lenguaje (el API o Application Programming
Interface de Java). Java incorpora en el propio lenguaje muchos aspectos que en cualquier otro
lenguaje son extensiones propiedad de empresas de software o fabricantes de ordenadores (threads,
ejecución remota, componentes, seguridad, acceso a bases de datos, etc.). Por eso muchos expertos
opinan que Java es el lenguaje ideal para aprender la informática moderna, porque incorpora todos
estos conceptos de un modo estándar, mucho más sencillo y claro que con las citadas extensiones de
otros lenguajes. Esto es consecuencia de haber sido diseñado más recientemente y por un único
equipo.
El principal objetivo del lenguaje Java es llegar a ser el “nexo universal” que conecte a los
usuarios con la información, esté ésta situada en el ordenador local, en un servidor de Web, en una
base de datos o en cualquier otro lugar.
Java es un lenguaje muy completo (de hecho se está convirtiendo en un macro-lenguaje: Java
1.0 tenía 12 packages; Java 1.1 tenía 23 y Java 1.2 tiene 59). En cierta forma casi todo depende de
casi todo. Por ello, conviene aprenderlo de modo iterativo: primero una visión muy general, que se
va refinando en sucesivas iteraciones. Una forma de hacerlo es empezar con un ejemplo completo
en el que ya aparecen algunas de las características más importantes.
La compañía Sun describe el lenguaje Java como “simple, orientado a objetos, distribuido,
interpretado, robusto, seguro, de arquitectura neutra, portable, de altas prestaciones, multitarea y
dinámico”. Además de una serie de halagos por parte de Sun hacia su propia criatura, el hecho es
que todo ello describe bastante bien el lenguaje Java, aunque en algunas de esas características el
lenguaje sea todavía bastante mejorable. Algunas de las anteriores ideas se irán explicando a lo
largo de este manual.

Gerencia de Proyecto

Qué es un proyecto
Un proyecto es un esfuerzo planificado, temporal y único, realizado para crear productos o servicios únicos que agreguen valor o provoquen un cambio beneficioso. Esto en contraste con la forma más tradicional de trabajar, en base a procesos, en la cual se opera en forma permanente, creando los mismos productos o servicios una y otra vez.

Que es la gerencia de proyectos (Project management)
Gerencia de proyectos es la disciplina de organizar y administrar los recursos, de forma tal que un proyecto dado sea terminado completamente dentro de las restricciones de alcance, tiempo y coste planteados a su inicio.Dada la naturaleza única de un proyecto, en contraste con los procesos u operaciones de una organización, administrar un proyecto requiere de una filosofía distinta, así como de habilidades y competencias específicas. De allí la necesidad de la disciplina Gerencia de Proyectos.
La gerencia de proyectos implica ejecutar una serie de actividades, que consumen recursos como tiempo, dinero, gente, materiales, energía, comunicación (entre otros) para lograr unos objetivos pre-definidos.

Historia de la gerencia de proyectos
En la primera mitad del siglo XX, los proyectos eran administrados con métodos y técnicas informales, basados en los gráficos Gantt – una representación gráfica del tiempo basada en barras, útil para controlar el trabajo y registrar el avance de tareas. En los años 50, se desarrollaron en Estados Unidos dos modelos matemáticos: PERT (Program Evaluation and Review Technique, técnica para evaluar y revisar programas, desarrollado por la Marina) y CPM (Critical Path Method, método de ruta crítica, desarrollado por DuPont y Remington Rand, para manejar proyectos de mantenimiento de plantas). El PERT/CPM es, hasta la fecha, la base metodológica utilizada por los gerentes de proyectos profesionales.En 1969, se formó el PMI (Project Management Institute, Instituto de Gerencia de Proyectos), bajo la premisa que cualquier proyecto, sin importar su naturaleza, utiliza las mismas bases metodológicas y herramientas. Es esta organización la que dicta los estándares en esa materia.



Características de los
proyectos de ingeniería

Los proyectos de ingeniería no son actividades de rutina y, sus parámetros de definición y control (objeto de proyecto; presupuesto; programación, etc.) exigen la participación de las más diversas áreas de la organización e institucionales para minimizar los riesgos que los proyectos envuelven (financieros, económicos,
imagen de la empresa, expansiones / adecuaciones futuras, impacto ambiental, entre otros). De modo que, en la toma de decisiones son consideradas las opiniones de sectores tan diversos como: Marketing, Ingeniería del producto, Ingeniería de procesos, Operación y Mantenimiento. Un plan concebido y aprobado por todas las partes implicadas tiene más posibilidades de alcanzar el éxito.
Puede realizar programas estratégicos de largo plazo, ser un monoproyecto de duración generalmente menor de 3 años o subproyectos caracterizados por esfuerzos menores a corto plazo.
Su ciclo de vida se compone de varias fases características no siempre bien diferenciadas, pero que deben ser analizadas individualmente para prever las necesidades básicas de cada una (organización, personal en cantidad y calificación, instalaciones, sistemas, etc.).

2.Etapas de un Proyecto.

Estas fases son las siguientes:

-Concepción
Es el primer paso del análisis del proyecto, en este proceso en Analista se reúne con el cliente y/o usuario (un representante institucional, departamental o cliente particular), e identifican las metas globales, se analizan las perspectivas del cliente, sus necesidades y requerimientos, sobre la planificación temporal y presupuestal, líneas de
mercadeo y otros puntos que puedan ayudar a la identificación y desarrollo del proyecto.

· Reconocimiento del problema.
·
Evaluación y Síntesis.
· Modelado.
· Especificación.
· Revisión.


-Viabilización
Muchas veces cuando se emprende el desarrollo de un proyecto, los recursos y el tiempo no son realistas para su materialización sin tener pérdidas económicas y frustración profesional. La viabilidad y el análisis de
riesgos están relacionados de muchas maneras, si el riesgo del proyecto es alto, la viabilidad de producir un producto de calidad se reduce, sin embargo se deben tomar en cuenta cuatro áreas principales de interés:

Viabilidad económica.
Viabilidad Técnica.
Viabilidad Legal.

-Implantación
En esta fase del proyecto. Es el proceso instalar equipos o Software nuevo, como resultado de un análisis y diseño previo como resultado de la sustitución o mejoramiento de la forma de llevar a cavo un proceso automatizado.

Al Implantar un producto lo primero que debemos hacer es asegurarnos que el producto sea operacional o sea que funcione de acuerdo a los requerimientos del análisis y permitir que los usuarios puedan operarlo.
Existen varios enfoques de Implementación:
· Es darle
responsabilidad a los grupos.
· Uso de diferentes estrategias para el
entrenamiento de los usuarios.
· El Analista necesita ponderar la situación y proponer un plan de conversión que sea adecuado para
la organización.
· El Analista necesita formular medidas de
desempeño con las cuales evaluar a los Usuarios.
· Debe Convertir físicamente el producto antiguo, al nuevo modificado.


-Operación
Se lleva a cabo para identificar puntos débiles y fuertes del producto implantado. La evaluación ocurre a lo largo de cualquiera de las siguientes cuatro dimensiones:

Evaluación operacional:

Es el Momento en que sé evalúa la manera en que funciona el producto, esto incluye su facilidad de uso, Tiempo de respuesta ante una necesidad o proceso, como se adecuan los formatos en que se presenta la Información,
contabilidad global y su nivel de Utilidad.

Impacto Organizacional:
Identifica y mide los beneficios operacionales para la
Empresa en áreas tales como, Finanzas (Costos, Ingresos y Ganancias), eficiencia en el desempeño laboral e impacto competitivo, Impacto, rapidez y organización en el flujo de Información interna y externa.

Desempeño del Desarrollo:
Es la evaluación del Proceso de desarrollo adecuado tomando en
cuentas ciertos criterios como, Tiempo y esfuerzo en el desarrollo concuerden con presupuesto y estándares y otros criterios de Administración de Proyectos. Además se incluyen la valoración de los métodos y herramientas utilizados durante el desarrollo del producto.


Durante el desarrollo de las diversas fases del ciclo de vida, los requisitos de la organización y las funciones que participan varían, pero si el
proyecto es muy importante para la empresa, la estructura transitoria necesaria será en todo momento vinculada a la Dirección y/o Presidencia de la empresa. Esta estructura constituye la Gerencia del Proyecto que.


3.Conceptos de grupos de Trabajo

un grupo de trabajo es un subsistema especializado dentro de una organización. Las personas que lo componen lo diseñan con un funcionamiento fijo para proyectar y realizar el mismo tipo de tareas. Un comité del senado o una comisión del ayuntamiento también lo son. El sentimiento de pertenencia al grupo es automático y el alto o bajo nivel de satisfacción es lo común.
El número de componentes es entre 10 y 20, aunque su productividad está limitada por la combinación de interrelaciones posibles o socio gramas que estudiaron Moreno y Dane.
Su estructura es un presidente o un director, que es el responsable y establece el funcionamiento del grupo, no debe de tener una personalidad autoritaria, pues provocaría deserciones entre iguales (en preparación técnica), pero si actuar como moderador si es necesario y le sigue un coordinador, que en ausencia del director le sustituye y está encargado de la recopilación de información y hacerla llegar a los integrantes o componentes del grupo, es un vicepresidente o un secretario técnico y el resto de las personas (vocales o miembros) realizan las tareas según su preparación personal y si es posible sus preferencias. Alguno de ellos o rotativamente deberá hacer las funciones de un secretario como convocar a las reuniones, etc. En terminología inglesa y con un concepto de célula: 'convenor' que convoca, 'facilitator' que facilita la información, 'recorder' que toma notas y 'reporter' que las trasmite. No hay o no debe haber en el grupo líderes informales, que quizás no sea necesario su carisma porque el ente es técnico y no pretende ser de otro tipo. Si que son necesarias la propaganda y la publicidad de sus trabajos en las comunidades políticas y científica. Si es posible debe ser independiente de la alta dirección de la organización y trabajar por resultados.
Equipos de Trabajos
El equipo de trabajo es el conjunto de personas asignadas o autoasignadas, de acuerdo a habilidades y competencias específicas, para cumplir una determinada meta bajo la conducción de un coordinador





Diferencias entre equipo de trabajo y grupo de trabajo


Aunque ya se mencionaron en la lección anterior algunas diferencias entre grupo de trabajo y equipo de trabajo vamos a tratar ahora de precisarlas:
Grupo de trabajo es un conjunto de personas que realizan dentro de una organización una labor similar.
Suelen estar próximas físicamente, tienen un mismo jefe, realizan el mismo tipo de trabajo pero son autónomos, no dependen del trabajo de sus compañeros: cada uno realiza su trabajo y responde individualmente del mismo.
Por ejemplo, en un hospital los anestesistas forman un grupo de trabajo: realizan la misma actividad, tienen un jefe común (el jefe de sección), pero cada uno responde de su trabajo (la labor de un anestesista no depende de la de sus compañeros).
Puede que un anestesista realice una labor fantástica mientras que el departamento en su conjunto sea un auténtico desastre.
Las diferencias entre equipo de trabajo y grupo de trabajo son importantes:
El equipo de trabajo responde en su conjunto del trabajo realizado mientras que en el grupo de trabajo cada persona responde individualmente.
En el grupo de trabajo sus miembros tienen formación similar y realizan el mismo tipo de trabajo (no son complementarios). En el equipo de trabajo cada miembro domina una faceta determinada y realiza una parte concreta del proyecto (sí son complementarios).
En el grupo de trabajo cada persona puede tener una manera particular de funcionar, mientras que en el equipo es necesario la coordinación, lo que va a exigir establecer unos estándares comunes de actuación (rapidez de respuesta, eficacia, precisión, dedicación, etc.).
En el equipo de trabajo es fundamental la cohesión, hay una estrecha colaboración entre sus miembros. Esto no tiene por qué ocurrir en el grupo de trabajo.
El grupo de trabajo se estructura por niveles jerárquicos. En el equipo de trabajo en cambio las jerarquías se diluyen: hay un jefe de equipo con una serie de colaboradores, elegidos en función de sus conocimientos, que funcionan dentro del equipo en pie de igualdad aunque sus categorías laborales puedan ser muy diferentes.
Por ejemplo, una entidad financiera española constituyó un equipo de trabajo para analizar una oportunidad de inversión en el extranjero. Formaban parte de este equipo desde subdirectores generales hasta empleados de reciente incorporación, especialistas en determinadas materias. Dentro del equipo todos funcionaban al mismo nivel, no había distinciones jerárquicas.


4.Dinámicas de Grupos

Se define dinámica de grupo desde el punto de vista teórico : conjunto de fenómenos psicológicos que se producen en el grupo así como las leyes que lo producen y regulan. Desde este punto de vista es una rama de la psicología social
Se define la dinámica de grupos desde el punto de vista de la técnica : Conjunto de procedimientos y medios para ser utilizados en situaciones grupales con el fin de que se manifieste de manera mas expresa los fenómenos, hechos y procesos grupales que se están viviendo en el seno del grupo en el que se aplican.

5.Equipos dinámicos de trabajo
Es un equipo de trabajo que permite discutir entre y con ellos, qué tipo de gente debe y no debe servir en posiciones superiores de liderazgo.
Se basa en un revolucionario concepto denominado Espacio de Trabajo Dinámico que da a las personas la flexibilidad necesaria para adaptar el entorno de trabajo a toda una gama de distintas necesidades, estilos de trabajo y preferencias, a lo largo del día.
Poseen.accesorios que pueden y permiten desplazarse fácilmente a lo largo del puesto de trabajo para adaptarse a distintas tareas y aplicaciones.
Es un ambiente de trabajo diseñado para crear privacidad total o para permitir un trabajo de colaboración en equipo. Esto da a los empleados control dinámico sobre su propio espacio de trabajo de modo que puedan equilibrar su necesidad de concentración con la de interactuar con otras personas.
Lo elemental es o consiste en Aportar la privacidad necesaria, Facilitar el acceso a la información , Hacer evidente el proceso de trabajo y Estimular y atraer.Tambien es necesario que se pueda transmitir la imagen de Espacio de Trabajo Dinámico que apoya los cambios de organización de manera natural y sin esfuerzo. Distintos empleados pueden utilizar el mismo espacio simplemente reposicionando las herramientas de trabajo para satisfacer sus propias necesidades y preferencias.

6.Equipos de alto rendimiento.
Los Equipos de altos rendimiento son los que poseen las siguientes caracteristicas:

Liderazgo. Los líderes deben ser entrenadores. El buen liderazgo hace posible que los empleados realicen su trabajo con orgullo. Los líderes no hacen las cosas a su gente; hace las cosas con su gente. Ellos escuchan. Ellos y ellas se ganan el respeto de los demás. Tienen un profundo conocimiento que les permite dirigir. Un líder adecuado debe tener la visión de hacia dónde va la organización. El líder debe ser capaz de comunicar a su equipo las metas de la organización, para que los esfuerzos se dirijan hacia la dirección correcta.
Metas específicas, cuantificables. Sin una meta, no hay equipo. ¿Por qué es importante para un equipo tener un propósito, una meta? Porque ayuda a sus miembros a saber hacia dónde van. Les proporciona una dirección. Un equipo tendrá más probabilidad de alcanzar el éxito en la medida en que todos sus componentes conozcan y comprendan su propósito y metas. Si existe confusión o desacuerdo, el éxito del equipo será más difícil de conseguir.
Respeto, compromiso y lealtad. El respeto mutuo entre los miembros del equipo y los líderes, es otra característica de los equipos eficaces. También existirá disposición a hacer un esfuerzo extra si está presente la lealtad y el compromiso con las metas.
Comunicación eficaz. Son numerosas las investigaciones que demuestran que este es el problema principal que perciben los empleados actualmente. El líder y los miembros del equipo deben intercambiar información y retroalimentación. Deben preguntar: ¿Cómo lo estoy haciendo?. ¿Qué es correcto y qué es incorrecto?. ¿Cómo lo puedo hacer mejor?. ¿Qué necesitas para hacer mejor el trabajo?.
Aprender durante el camino. ¿Hay progreso?. ¿Cómo lo estamos haciendo? Debe obtenerse retroalimentación sobre el resultado del trabajo realizado por el equipo. Esta retroalimentación permitirá rectificar cuando se detecte que no se está en la dirección correcta. Por otra parte, el líder del equipo deberá reconocer los esfuerzos realizados, alabar cuando se está trabajando bien y redirigir cuando no es así.
Pensamiento positivo. Permitir que las ideas fluyan libremente. Ninguna idea debe ser criticada. Las nuevas ideas son bienvenidas y asumir riesgos debe ser valorado y estimulado. Los errores deben ser vistos como oportunidades de crecimiento y aprendizaje, no como ocasiones para la censura y la reprensión.
Reconocimiento. El reconocimiento es una clave para la motivación. La otra es el reto, el desafío. El reconocimiento puede ser tan simple como una expresión verbal del tipo: "Bien hecho". O tener la oportunidad de presentar los resultados a la dirección, o una mención del trabajo realizado por el equipo hecha al resto de la organización, una carta de felicitación,... En definitiva, el equipo debe ser reconocido por sus esfuerzos y resultados.
Tipología de los Equipos de Trabajo
Los equipos de trabajo pueden agruparse en distintos tipos, dependiendo de quienes los compongan, el alcance de sus objetivos, la voluntariedad u obligatoriedad de la participación en ellos y otras características.
Definiremos aquí cuatro de ellos, así como sus rasgos más reveladores.
Círculos de Calidad. Están integrados por un pequeño número de trabajadores que desarrollan su actividad en una misma área, junto a su supervisor, y que se reúnen voluntariamente para analizar problemas propios de su actividad y elaborar soluciones. El círculo se reúne periódicamente, durante una hora a la semana y dentro del horario laboral, aunque si es necesario el número de horas y reuniones puede ser ampliado.Son los propios miembros del círculo los que eligen el problema a tratar, siendo esta la primera decisión que habrá de tomar el equipo. Recogen la información oportuna y, si es necesario, pueden contar con técnicos y asesoramiento externo en general, ya que la gerencia les apoya completamente y les brinda toda la ayuda que precisen.La dirección del círculo no tiene que ser siempre ejercida por el mando directo del grupo. Es posible que otro miembro distinto del círculo coordine y dirija las reuniones.
Equipos de Progreso. También llamados "equipos de mejora" o "equipos de desarrollo". Sus miembros se reúnen de forma no voluntaria con el propósito de resolver un problema concreto por el que han sido convocados. Una vez alcanzado el objetivo, el grupo se disuelve.Generalmente se tratan problemas que afectan a distintas áreas de trabajo o departamentos. Por esa razón, la composición es multifuncional y multinivel. Los participantes son seleccionados sobre la base de su conocimiento y experiencia, así como del grado de involucración en el problema.La duración y periodicidad de las reuniones depende de la urgencia de la solución, pudiendo ir desde reuniones cortas y de frecuencia limitada, hasta reuniones largas y frecuentes.
Equipos de Procesos. Una de las líneas de actuación con más potencialidad en la reducción de costes y el incremento de la eficacia y la eficiencia, es la gestión de los procesos. Un equipo de este tipo se centra en un proceso específico con el objetivo de mejorarlos, rediseñarlo o de operar en el mismo un cambio total mediante una acción de reingeniería.Sus miembros son dirigidos por la gerencia, o por alguien que está fuertemente relacionado con el proceso en cuestión. Son equipos interfuncionales, en cuanto que el proceso meta comprenda a varias áreas o departamentos. Pueden implicar, en un momento dado, a otros equipos de progreso para la mejora de aspectos puntuales del proceso estudiado.
Equipos Autónomos. Son conocidos también con el nombre de "equipos de trabajo autogestionario" o de "equipos de trabajo autodirigidos". Representan el grado de participación más amplio ya que, en la práctica, la dirección delega en ellos importantes funciones.El grupo adquiere una responsabilidad colectiva, administrando sus propias actividades sin interferencia de la gerencia. Tienen atribuciones sobre la planificación de las actividades, el presupuesto y la organización del trabajo. En ocasiones, incluso están facultados para contratar y despedir personal.La autoridad se ejerce de forma rotatoria, aunque la mayoría es la que decide en último término. Este tipo de participación es muy avanzada y, aunque ha demostrado funcionar bien, exige una cultura de la participación muy bien asentada y un alto grado de confianza entre la gerencia y los empleados.




Liderasgo

Definicion de Liderasgo.

Liderazgo es el proceso de influencia (por medio de la motivación) en las personas para lograr las metas deseadas. Para ser un buen lider se requiere carisma, Inteligencia, poder de convencimiento, sensibilidad, integridad, arrojo, imparcialidad, ser innovador, simpatía, cerebro y sobre todo mucho corazón para poder dirigir a un grupo de personas y lo sigan por su propia voluntad, motivándolos, estimulándolos y así alcanzar las metas deseadas, y que cada quien se sienta satisfecho y tenga la sensación de ganancia y no de pérdida.

Según el Diccionario de la Lengua Española (1986), liderazgo se define como la dirección, jefatura o conducción de un partido político, de un grupo social o de otra colectividad. El Diccionario de Ciencias de la Conducta (1956), lo define como las "cualidades de personalidad y capacidad que favorecen la guía y el control de otros individuos".

Otras definiciones son: -"El liderazgo es un intento de influencia interpersonal, dirigido a través del proceso de comunicación, al logro de una o varias metas"

Definicion de Lider.

Líder, aquella persona que tiene autoridad frente a un grupo, conservando la union del grupo y donde cada individuo ejecuta las ordenes en el marco de respeto colaboración sobre la obligación.

CARACTERÍSTICAS DE UN LÍDER

Entendemos el líder por las siguientes características.

1. El líder debe tener el carácter de miembro, es decir, debe pertenecer al grupo que encabeza, compartiendo con los demás miembros los patrones culturales y significados que ahí existen.

2.La primera significación del líder no resulta por sus rasgos individuales únicos, universales (estatura alta, baja , aspecto , voz, etc. ).

3. Sino que cada grupo considera líder al que sobresalga en algo que le interesa, o más brillante, o mejor organizador, el que posee más tacto, el que sea más agresivo, más santo o más bondadoso.

4. Cada grupo elabora su prototipo ideal y por lo tanto no puede haber un ideal único para todos los grupos. d) En cuarto lugar. El líder debe organizar, vigilar, dirigir o simplemente motivar al grupo a determinadas acciones o inacciones según sea la necesidad que se tenga. Estas cuatro cualidades del líder, son llamadas también carisma.

5 .Por último, otra exigencia que se presenta al líder es la de tener la oportunidad de ocupar ese rol en el grupo, si no se presenta dicha posibilidad, nunca podrá demostrar su capacidad de líder.

Definición de Gerencia.

La gerencia es un cargo que ocupa el director de una empresa lo cual tiene dentro de sus múltiples funciones, representar a la sociedad frente a terceros y coordinar todos los recursos a través del proceso de planeamiento, organización dirección y control a fin de lograr objetivos establecidos.

Henry, Sisk y Mario Sverdlik (1979) expresa que:

... El término (gerencia ) es difícil de definir: significa cosas diferentes para personas diferentes. Algunos lo identifican con funciones realizadas por empresarios, gerentes o supervisores, otros lo refieren a un grupo particular de personas. Para los trabajadores; gerencia es sinónimo del ejercicio de autoridad sobre sus vidas de trabajo...

De allí que, en muchos casos la gerencia cumple diversas funciones porque la persona que desempeña el rol de gerenciar tiene que desenvolverse como administrador, supervisor, delegador,etc. De allí la dificultad de establecer una definición concreta de ese término.

TIPOS DE GERENCIA

En la gerencia existen cuatro tipos los cuales son:

La Gerencia Patrimonial

Este tipo de gerencia es aquella que en la propiedad, los puestos principales de formulación de principios de acción y una proporción significativa de otros cargos superiores de la jerarquía son retenidos por miembros de una familia extensa.

La Gerencia Política

La gerencia política es menos común y al igual que la dirección patrimonial, sus posibilidades de supervivencia son débiles en las sociedades industrializantes modernas, ella existe cuando la propiedad, en altos cargos decisivos y los puestos administrativos claves están asignados sobre la base. de la afiliación y de las lealtades políticas.

La Gerencia por Objetivos

La gerencia por objetivos se define como el punto final (o meta) hacia el cual la gerencia dirige sus esfuerzos. El establecimiento de un objetivo es en efecto, la determinación de un propósito, y cuando se aplica a una organización empresaria, se convierte en el establecimiento de la razón de su existencia.

GERENTE

Persona, con plena capacidad jurídica, que dirige una empresa por cuenta y encargo del empresario. En esa persona se le encomienda la labor de cuidar, supervisar, controlar, planificar, las personas que bajo su mando están.














Aquí esta algo mas que consegui

TIPOS DE GERENTES

Se ha usado el término gerente para referirse a quien sea responsable de cumplir las cuatro actividades básicas de la administración en el desarrollo de sus relaciones. Una manera de captar la complejidad de la administración es entender que los gerentes pueden trabajar en diferentes niveles de una organización y de diferentes rangos de actividades dentro de ellas. Después de analizar el nivel y el alcance de diversos tipos de gerentes, sé verá también que diferentes tipos de administración refuerzan diferentes capacidades y roles.

Gerencia efectiva
La tarea fundamental de cualquier gerente de negocios es obtener los mejores resultados posibles a partir de los recursos disponibles. Por tal motivo, la gerencia ocupa la mayoría de su tiempo, si no todo, en problemas económicos a corto plazo, tales como: costos, precios, ventas, control de calidad y entrenamiento. De hecho, la mayoría de las técnicas y herramientas utilizadas por el gerente moderno están orientadas a la buena administración del negocio, con miras a obtener buenos resultados en el futuro. Alrededor de un 90% de los libros, reportes y estudios, relacionados con el área de negocios, versan sobre dicho tema.

Pero, en realidad, no necesitamos más o mejores herramientas, sino conceptos simples, que nos ayuden a organizar el negocio. Entre dichos conceptos, nos ocuparemos en particular de los siguientes: 1. la tarea de un gerente; 2. el mayor problema con el que éste debe lidiar; y, 3. el principio para definir y analizar este problema. La idea aquí no es dar una “fórmula mágica” que haga el trabajo por el gerente, sino organizar la tarea del gerente de modo tal que brinde resultados económicos satisfactorios.

1. La tarea de un gerente es dirigir los recursos y esfuerzos del negocio hacia las oportunidades, para obtener resultados económicamente relevantes. Aunque esta definición parezca obvia, cada estudio que he visto sobre la asignación de recursos y esfuerzos en negocios, demuestra que, por lo general, tiempo, esfuerzo, dinero y atención, son invertidos primero en los “problemas” y, en segundo lugar, en las oportunidades.

2. El mayor problema que se le presenta a los gerentes en su quehacer laboral es la confusión entre efectividad y eficiencia. No existe nada más inútil que hacer con eficiencia aquello que no es necesario hacer. Y, sin embargo, todas nuestras herramientas se enfocan en la eficiencia. Lo importante es enfocarse en hacer cosas que sean efectivas.

3. El principio para analizar dicho problema es que: “Los negocios no son un fenómeno natural, sino un producto social”. Pero en una situación de origen social los eventos no están distribuidos del mismo modo que en la naturaleza, es decir, no responden a la proporción propia de una curva de Gauss. Por el contrario, en una situación social, una pequeña parte de los eventos justifican el 90% del total de los resultados. Esto se aplica, claro está, al mercado. Sólo un pequeño número de clientes produce la mayoría de las órdenes; sólo un pequeño número de productos produce las mayores ganancias; sólo un pequeño grupo de los vendedores produce la mayoría de las nuevas ganancias; y esto se aplica al resto de las situaciones ligadas con el mundo de los negocios.

De acuerdo con este principio, los gerentes deben enfocar sus esfuerzos en esa pequeña parte del universo social que cuenta a la hora de obtener resultados económicos de relevancia. En eso consiste ser efectivo en vez de eficiente. No sirve de mucho ser eficiente en las tareas involucradas con aquella parte del universo social que brinda menores resultados. El reto está en descubrir y enfocarse en lo realmente efectivo o si se quiere, ser eficiente en áreas que sean efectivas.

Publicado originalmente en Harvard Business Review en 1963

PROGRAMACION EN ASSEMBLER

En este capítulo se está ya en condiciones de saber qué es la programación en ASSEMBLER; esto es, escribir una serie de códigos entendibles por el usuario que posteriormente serán convertidos en código de máquina entendible por el microprocesador, en este caso el Z-80.

La programación en ASSEMBLER requiere cuidados especiales si se desea sacar el máximo rendimiento, por ejemplo, ante dos instrucciones que obtengan el mismo resultado se debe elegir aquella que tenga menos ciclos de máquina o de reloj, o aquella que ocupe menos posiciones de memoria; incluso en algunos casos habrá que elegir entre ocupar menos posiciones o ser más rápidos, en función de las necesidades que se tengan. Esto no quiere decir que sea necesario conocer de memoria los ciclos de cada instrucción; un manual de ASSEMBLER debe contener toda la información necesaria, con un método de acceso fácil, a pesar de que en algún caso resulte redundante. Se pretende que este curso, además de como tal, pueda servir en el futuro como un manual de consulta rápida, por lo que en algunos casos, es posible que el lector encuentre información reiterada.

Otra buena costumbre cuando se programa en ASSEMBLER es poner comentarios; siempre hay una manera de ponerlos en cada instrucción o intercalados entre ellas. Los comentarios sólo ocupan lugar en el código simbólico o programa fuente; cualquier ensamblador los ignora cuando convierte el programa en código de máquina, lo cual quiere decir que no ocupará más un programa absoluto porque su simbólico tenga comentarios, pero tampoco irá más despacio. Cuando pase el tiempo y queramos modificar alguna parte del programa y se haya olvidado el porqué de cada instrucción, los comentarios serán de gran ayuda.

Siguiendo con la exposición de buenas costumbres nos referiremos, por último, al empleo de subrutinas. Ya veremos cómo se hacen y cómo se accede a ellas, pero hay que irse mentalizando a su uso. Esto es importante en este momento porque se trata de un problema de estructura del programa. Las ventajas son múltiples; una estructura de subrutinas es más fácil de entender, por lo tanto de modificar. Se da con frecuencia el caso de necesitar en un programa operaciones iguales o semejantes a las de otro, por lo tanto, con limitarse a copiar totalmente estas partes o como mucho, adaptarlas algo a las características del nuevo programa, saldríamos adelante.

Resumiendo, hay que acostumbrarse desde un principio a estos métodos y a la realización del organigrama, sobre el cual daremos algunas orientaciones al final de este capítulo. Toda esta información, más los diseños que se hagan de pantalla, de campos o de tablas, se guardan juntas en una carpeta o cosidas con grapa y se conseguirá una buena documentación de cada programa, documentación que nos será muy útil en el futuro.

Realización de un programa
Existen una serie de pasos que se deben seguir para dar por definitiva la realización de un programa. Cuando más detallada sea la organización de estos pasos, más fácil será la realización del siguiente. El concepto programa abarca a todo lo que se puede realizar en una corriente de instrucciones dentro de un ordenador, por lo cual, tan programa es un juego, como llevar la contabilidad de una casa o la solución de problemas científicos; la metodología a seguir es la misma.

PASOS A SEGUIR:
a) Planteamiento del problema: Lo que en la informática profesional se llama análisis funcional. Es la definición de lo que se quiere realizar, la información de que se dispone, la información que se quiere obtener, la información que se quiere volver a utilizar, los formatos de pantalla deseados; todas estas definiciones se deben hacer con el máximo detalle, como si se pretendiese explicar a otra persona cuál es nuestro problema y cómo nos gustaría que nos lo solucionase.

b) Viabilidad de resolver el problema con un ordenador: Lo que en la informática profesional se llama análisis técnico u orgánico. En este paso se valorará la posibilidad de resolver el problema con el ordenador de que se dispone, así como de la periferia a nuestro alcance (impresora, microdrive, etc.). Se definirá toda la información del paso anterior como datos entendibles para el ordenador, indicando en qué código irán, cuánta memoria ocuparán, en qué lugar han de almacenarse y cómo se procesarán; lo mismo para los diseños de pantalla. En este paso es donde se debe decidir qué procesos se hacen por medio de subrutinas, y ,como curiosidad, si el programa se hace en BASIC o en ASSEMBLER.

c) Realización del programa: Es decir, la programación propiamente dicha. Este paso se divide en dos partes: la construcción del organigrama y la codificación. Estos dos pasos son complementarios, cuanto más se detalle el organigrama menos vueltas se da a la codificación, y viceversa.


El organigrama es una construcción gráfica del flujo o caminos posibles que tiene el programa.

La codificación es la escritura del lenguaje simbólico contemplando todas las alternativas posibles definidas en el organigrama.

Por supuesto, hay muchos programadores que nunca hacen un organigrama, pero también hay muchos que se olvidan de codificar una rama. En cualquier caso, para un programa sencillo o bien para un programador experto el organigrama puede no ser muy detallado o bien omitirse.

d) Prueba del programa: En este paso se preparan unos datos de entrada al programa de los cuales ya se conocen los resultados que obtienen, contemplando, si es posible, todos los casos. Por ejemplo, si se hace un programa para resolver reíces cuadradas, se introducirán una serie de valores de los que ya se conoce el resultado.

e) Documentación: Una vez concluidos los pasos anteriores, se reúne todo el material e incluso se comentan los problemas o dificultades encontrados y cómo se han solucionado. Dependerá de lo ordenado que sea cada cual el obtener como resultado una buena documentación. Ver FIGURA 4-1.


Figura 4-1. Pasos para la realización de un programa.

Todo lo anteriormente descrito se puede hacer o no, pero son métodos ya muy estudiados que producen unos buenos resultados. La metodología anteriormente descrita es una orientación de la más elemental; se pueden usar técnicas más complicadas pero que se salen un poco de lo que es un micro-ordenador. Se dice que en un programa vale todo, siempre y cuando funcione. Si existe un método que lleve a un buen resultado, no sólo que funcione, sino que sea lo más rápido posible, que no se repitan procesos, que ocupe la menor cantidad de memoria y que esté claro, ¿por qué no usarlo?

Formatos de instrucción en código máquina
La memoria del SPECTRUM está dividida en octetos. Un octeto es una agrupación de 8 bits y un bit es la unidad más pequeña de información; sólo puede informar de dos estados: o está activo o no. Cuando de un SPECTRUM se dice que tiene 16K indica que tiene, aproximadamente, 16.000 octetos de memoria disponible, que son exactamente en decimal 16.384; para uno de 48K se multiplica esta cantidad por 3.

Los 48K de memoria disponible en RAM más los 16K que usa el programa monitor en ROM, suman 64K, que son 65.535 octetos. Esto es, desde la posición 0 de memoria a la 65.535, que es en hexadecimal FFFFh y en binario 1111111111111111b y a su vez la máxima cantidad que se puede escribir en dos octetos.

Las instrucciones en el SPECTRUM pueden ocupar 1, 2, 3 o 4 octetos en función del código de operación y básicamente, tiene los formatos que se ven en la FIGURA 5 del CAPITULO 3.

Como se vé, lo que es común a todos los formatos es que los primeros tienen el código de operación y los últimos el operando. Sobre el operando hay que tener en cuenta que cuando son dos octetos el microprocesador espera encontrar el octeto de orden inferior en el primer octeto del operando, y el de orden superior en el segundo, de tal forma que al referirse la valor de operando 7F3Bh el ensamblador almacenará la instrucción en memoria de la siguiente manera:

CODIGO OPERACION
CODIGO OPERACION
0 0 1 1 1 0 1 1
0 1 1 1 1 1 1 1


3Bh
7Fh



Existe una combinación diferente de bits para cada instrucción en el código de operación, a pesar de que la única diferencia sea el registro usado. Por lo tanto, habrá una parte fija y otra variable en el código de operación en función de dichos registros.

Otra cosa muy curiosa es ver cómo el microprocesador va leyendo una serie de octetos llenos de instrucciones cuando estos pueden tener cuatro longitudes distintas. Es muy sencillo. Se recordará que el microprocesador tiene un registro PC que indica la dirección de la memoria donde está la próxima instrucción a ejecutar. Cuando la lee, en función del código de operación, sabe cuantos octetos ocupa; en ese momento sólo tiene que incrementar el registro PC en esa cantidad, mientras va leyendo los restantes octetos de la instrucción, para que cuando vaya a leer la siguiente instrucción, este registro ya la tenga apuntada. Ver FIGURA 4-2.


Figura 4-2. Forma de avanzar el registro PC.


Necesidad de conocer el código máquina
Podríamos preguntarnos: voy a escribir mi programa en el lenguaje simbólico ASSEMBLER, tengo un ensamblador magnífico que me lo va a traducir, ¿qué necesidad tengo de conocer que bit tiene que estar activo y cual no?

Desde luego, el que tenga un buen ensamblador y escriba un programa de principio a final, buena gana de estar descifrando códigos y pasándolos de binario a hexadecimal. Pero no siempre se dispone de un buen ensamblador o se quiere estar cargándolo para pocas instrucciones, con lo cual se meterían en la memoria los valores de las instrucciones y se saltaría a esa posición con lo que el microprocesador empezaría a trabajar. Además, existen algunas técnicas en programación que hacen necesario este conocimiento, por ejemplo:

Programas automodificables: La primera vez que pasan por una rutina pasan por una instrucción que ejecuta una operación; posteriormente, esa instrucción se modifica con lo que la próxima vez que pase ejecuta una operación distinta.

Parches: Durante la prueba del programa se encuentra un error; conociendo las posiciones de memoria donde está cargado el programa se puede modificar directamente y seguir la prueba, incluso si la modificación ocupa más espacio, se deja una zona del programa definida a ceros binarios, se hace sobre ella la modificación terminando con un retorno y desde la posición del error, se hace una llamada a esa subrutina.

Por otro lado, no es necesario tener un ensamblador para poder utilizar el Spectrum en código máquina; es posible escribir el programa en Assembler y traducirlo a código máquina, manualmente; si el programa no es muy largo, la labor no resulta excesivamente tediosa. De hecho, es preferible aprender primero a ensamblar «a mano», ya que esto proporciona un conocimiento más profundo del Assembler, y facilita la utilización posterior de un programa ensamblador.

En este mismo curso, describimos en detalle la utilización del que consideramos el mejor ensamblador que se ha escrito para el Spectrum, el "GENS 3", que desde ahora, recomendamos a nuestros lectores; mientras tanto, indicaremos con todo detalle la forma de ensamblar "a mano" cada instrucción y todos los ejemplos que demos, se podrán introducir en el ordenador sin necesidad de ensamblador, por lo que para seguir este curso, sólo es necesario disponer de un Spectrum.

Formatos de instrucción en lenguaje simbólico
Como se recordará, el lenguaje simbólico es aquél en el que escribimos el programa fuente. Los códigos nemotécnicos que se han utilizado para el microprocesador Z-80, son abreviaturas de las palabras inglesas que definen la operación que realizan.

El formato de la instrucción y sus normas de sintaxis pueden variar algo en función del ensamblador elegido; pero siempre hay unas reglas mínimas que suelen cumplir y a esas nos referiremos hasta el capítulo que trate más profundamente el ensamblador.

El formato normal es el siguiente:

ETIQUETA NEMOTECNICO OPERANDOS ; COMENTARIOS



ETIQUETA. La etiqueta es opcional, sólo debe ponerse cuando sea necesario referirse a esta instrucción desde otra, bien para saltar a ella o para modificarla. Como etiqueta sirve cualquier sucesión de letras o números siempre que empiece por una letra; los espacios no son significativos, por lo cual se usa el símbolo "_" para separar palabras. Sólo los seis primeros caracteres son tratados como etiqueta.

Ejemplos:

ETIQUETA ETIQUE
etiqueta etique
MUEVE_DATOS MUEVE_
2 (ilegal)
DOS DOS
UN_2 UN_2



NEMOTECNICO. Es el código de la instrucción y siempre estará presente pues es el que propiamente la define. Consta de 1 a 4 letras mayúsculas que recuerdan en parte la operación que realizan.

Ejemplo:

Instrucción de carga
en inglés LOAD
nemotécnico LD



OPERANDOS. Este es el campo más variable de la instrucción. Muchas instrucciones no tienen necesidad de que se les definan operandos, ya que estos están implícitos en su operación. Otras tienen necesidad de tener definidos dos operandos, en este caso irán separados por coma ",". Operando podrá ser un número, una etiqueta, un registro o un par de registros. Cuando el valor del ooperando se refiera al contenido de la posición de memoria indicada, el operando se pondrá entre paréntesis.

Ejemplos:

HL Valor del par de registros HL.
(HL) Contenido de la posición de memoria direccionada por HL.
36FAh Valor hexadecimal 36FAh.
(36FA) Contenido de la posición de memoria 36FAH.



COMENTARIOS. En un número limitado de caracteres, es una explicación del porqué y para qué de esta instrucción. Va separado por ";" de los operandos.

Ejemplo:

PERIODO LD A,30 ; DIAS DEL MES




Contador de posición
El ensamblador, en tiempo de ensamblaje (mientras está ensamblando), mantiene un contador de posición (location counter). Este contador tiene el valor de la dirección de la instrucción que se está ensamblando. Es posible acceder a este valor usando el símbolo "$" (dólar) que lo representa. Este símbolo se usa como una etiqueta en el campo de operando de la instrucción, de tal forma que si se quiere saltar a diez posiciones de memoria más adelante, se saltaría a "$+10". Cuando se use esta facilidad hay que tener en cuenta el número de octetos de cada instrucción.

Generación de palabras de datos
Por la misma razón que en el formato de instrucciones, pueden existir diferencias entre ensambladores cuando se definen datos; por lo tanto, seguiremos en la línea de lo que suele ser habitual. La definición de datos se hace por medio de unos códigos seudonemotécnicos, también llamados directivos, que actúan de una manera similar a las instrucciones. Estos directivos sólo tienen valor en tiempo de ensamblaje (en realidad son comandos del ensamblador y no tienen código de operación), generan una o varias palabras de datos y quedan definidas dentro del programa absoluto. El formato es el siguiente:

ETIQUETA SEUDO-NEMOTECNICO EXPRESION



ETIQUETA: Sigue las mismas normas que para instrucciones, y su uso está justificado por la necesidad de acceder a los datos. Sólo es obligatorio con el directivo EQU.

SEUDO-NEMOTECNICO: Son una serie de caracteres en mayúsculas, basados en el idioma inglés, que recuerdan el tipo de dato que definen. Como más usuales citaremos:

EQU expresión
Tiene que estar precedido por una etiqueta. Pone la etiqueta igual al valor de la expresión. La expresión no puede contener una etiqueta que no haya sido previamente valorada.

DEFB expresión, expresión...
Cada expresión tiene que tener un valor que entre en un octeto. Coloca el valor de cada expresión en octetos consecutivos a partir del contador de posición.

DEFW expresión, expresión...
Cada expresión tiene que tener un valor que entre en dos octetos. Coloca el valor de cada expresión en pares de octetos consecutivos a partir del contador de posición.

DEFS expresión
Reserva un bloque de memoria igual al valor de la expresión.

DEFM 's'
Define el contenido del octeto con el valor en código ASCII de las letras colocadas entre comillas.

Diagrama de flujo
Conocidos también como organigramas u ordinogramas, son una construcción gráfica del programa. Un buen organigrama facilita la codificación posterior y proporciona una representación visual de todas las situaciones o ramas del programa.

Si se utilizan los símbolos estándar, cualquier otro usuario podrá entenderlo; por lo tanto, se definirán a continuación los más utilizados, que son suficientes para la realización de los organigramas del SPECTRUM.

Como normas generales se tendrá en cuenta:

a) El tamaño de los símbolos es variable, sólo se deben mantener las proporciones.

b) En el interior de los símbolos se debe escribir claro y conciso.

c) Salvo que se indique lo contrario, la dirección del flujo en el organigrama es: de izquierda a derecha y de arriba a abajo.

Símbolos básicos

Representa el proceso a realizar. Ejemplo: Operación aritmética, cambio de valores, actualización de una variable, etcétera.

Representa la dirección del flujo del programa. Estas flechas o líneas unen los símbolos del organigrama. Las direcciones de arriba a abajo y de izquierda a derecha no es necesario señalarlas, las otras sí.

Se usa para añadir comentarios o anotaciones marginales de tipo aclaratorio.


Símbolos especializados de entrada/salida

Representa una función de entrada/salida por medio de un documento. Por ejemplo, una impresión.

Representa una función de entrada/salida en la que la entrada es manual en tiempo de proceso. Ejemplos: teclado, interruptores, pulsado de botones, etc.

Representa una función de entrada/salida en la que la información es presentada para uso humano en tiempo de proceso. Ejemplo: indicadores, pantalla de vídeo.

Representa una función de entrada/salida sobre una cinta magnética. Por ejemplo, el cassette.

Representa una función de entrada/salida sobre un disco magnético.


Símbolos especializados

Representa una decisión dando paso a las alternativas que pueden ser seguidas.

Representa el nombre de un proceso que consiste en una o más operaciones. Por ejemplo, las subrutinas.

Representa una conexión dentro del organigrama, tanto de salida hacia, como de entrada por. Normalmente se pone una letra o un número para indicar hacia dónde se dirige o el nombre de la entrada. Una flecha marcará el sentido.


Ejemplos:

La decisión "Y" se dirigirá a "B", que estará definido en otra parte del organigrama.

El flujo de programa llega desde el punto "B", donde se le mandó aquí.


Representa un punto terminal en el programa. Por ejemplo: el comienzo, el final, un punto de espera, un alto, una interrupción, etc.


Otros símbolos usados

Básicos



Especializados de entrada/salida



Este símbolo podría usarse para diferenciar entre el cassete y el microdrive.


Especializados de proceso




Una tabla de saltos se puede representar de la siguiente manera:



En la FIGURA 4-3, se puede ver un ejemplo de lo que podría ser un organigrama que representara las actividades básicas de una persona. Creemos que el ejemplo es bastante ilustrativo de cómo se hace un organigrama. Esperamos, no obstante, que ninguno de nuestros lectores rija su existencia por un bucle de tan escasas posibilidades.


Figura 4-3.


Presentación de las instrucciones
A partir del próximo capítulo iremos estudiando por grupos, todas las instrucciones que usa el Z-80. Veremos la forma de utilizarlas en Assembler, y la forma de ensamblarlas en código máquina para aquellos que no dispongan de ensamblador. También veremos una serie de ejemplos que irán creciendo en complejidad, y que el lector podrá teclear en su ordenador para irse habituando al uso de este lenguaje.

Las instrucciones se presentarán de la siguiente manera:

1) Código simbólico: En el operando se usarán las siguientes claves:

r,r' = Uno de los registros A, B, C, D, E, H o L.
n = Una expresión o número, cuyo valor no supere el tamaño de un octeto. Entre 0 y 255.
nn = Una expresión o número, cuyo valor no supere el tamaño de dos octetos. Entre 0 y 65535.
d = Una expresión o número con valores comprendidos desde -128 a +127
b = Una expresión o número con valores comprendidos entre 0 y 7.
e = Una expresión o número con valores comprendidos entre -126 y +129.
cc = Estado de los indicadores de condición en las instrucciones que los usan.
qq = Cualquiera de los pares de registros BC, DE, HL o AF.
ss = Cualquiera de los pares de registros BC, DE, HL o SP.
pp = Cualquiera de los pares de registros BC, DE, IX o SP.
rr = Cualquiera de los pares de registros BC, DE, IY o SP.
s = Cualquier r, n, (HL), (IX+d) o (IY+d).
m = Cualquier r, (HL), (IX+d) o (IY+d).

2) Objeto: Donde se describirá la operación que realizará.

3) Código de máquina: Donde se representará el código binario de la instrucción y el hexadecimal, si es posible.

4) Indicadores de condición que afecta: Siempre que la instrucción afecte a los indicadores de condición se indicará cuáles y cómo los afecta.

Estos son: C = acarreo
N = suma/resta
P/V = paridad/desbordamiento
H = semi-acarreo
Z = cero
S = signo



5) Número de ciclos de máquina: Número de veces que el microprocesador accede a la memoria.

6) Número de ciclos de reloj: Número de ciclos de reloj que necesita la instrucción para ejecutarse.

7) Ejemplos: Con cada instrucción se dará un ejemplo que muestre sobre el papel la forma en que actúa y cómo modifica los registros y las posiciones de memoria a las que afecta.

Por otro lado, tambíen veremos ejemplos que se podrán introducir en el ordenador, y cuya realización explicaremos de forma exhaustiva. De cada ejemplo, se dará el listado Assembler, para que quien lo desee, pueda teclearlo por medio de un ensamblador. Para quienes no dispongan de ensamblador, se acompañará cada ejemplo de un programa en Basic (también explicado), que introduzca el código en memoria y lo ejecute.

Ejecución de código máquina en el Spectrum
Quienes dispongan de ensamblador, deberán mirar las instrucciones del mismo, para ver cómo deben introducir sus programas en memoria. En cualquier caso, en un capítulo posterior, estudiaremos en profundidad el manejo de ensambladores, y concretamente, del GENS 3, que a pesar de todo, tiene el pequeño inconveniente de traer las instrucciones en inglés.

Por ahora, aprenderemos a utilizar el código máquina desde el Basic, construyendo pequeños programas cargadores de C/M.

Para introducir en el Spectrum un programa en C/M, empezaremos por escribirlo en Assembler sobre un papel. Una vez decidido en qué lugar de la memoria lo vamos a cargar, lo ensamblaremos a mano siguiendo las normas que daremos en los siguientes capítulos. El resultado, será una serie de números, comprendidos entre 0 y 255, que constituyen el código máquina propiamente dicho.

Mediante un bucle FOR ... NEXT en Basic, vamos introduciendo estos números en sucesivas posiciones de memoria a partir de la RAMTOP (que previamente habremos bajado). Y finalmente, utilizaremos la función USR para ejecutarlo.

Veamos un ejemplo: Supongamos que el programa que deseamos cargar, está representado por los números: 12, 65, 87, 80, 68, 91, 18, 71, 33, y 27 (en este ejemplo, los números son aleatorios, así que no se moleste nadie en desensamblarlo, por que no tiene sentido). Supongamos también, que lo queremos introducir a partir de la dirección 50000 y que se ejecuta a partir de 50005 (un programa en C/M no tiene por qué ejecutarse siempre desde la primera dirección).

Nuestro programa en Basic, empezaría por:

10 CLEAR 49999


A continuación, utilizaremos un bucle FOR ... NEXT para introducir el código.

20 FOR n=50000 TO 50009
30 READ a: POKE n,a
40 NEXT n
50 DATA 12,65,87,80,68
60 DATA 91,18,71,33,27


Ahora, sólo nos queda ejecutar el programa; para ello utilizaremos la función USR, que como todos saben, nos devuelve en el retorno, el contenido del par de registros BC (como regla nemotécnica, acuérdese de "Basic Comunicator", -comunicador con el Basic-). USR, como toda función, debe ir precedida de un comando, el que utilicemos, dependerá de lo que queramos hacer con el resultado; si no nos importa el valor de BC en el retorno, podemos hacer RANDOMIZE USR ... que sólo ocupa dos bytes. Si queremos imprimir el resultado, podemos hacer PRINT USR ... y si queremos asignar el resultado a una variable, para luego trabajar con él, podemos hacer LET a=USR ... En cualquier caso, detrás de USR deberá ir la dirección a partir de la cual se debe ejecutar nuestro programa. Supongamos que en nuestro ejemplo, no nos importa el resultado, así que haríamos:

70 RANDOMIZE USR 50005


Con lo que el Sistema Operativo pasa el control a nuestro programa en C/M, hasta que el microprocesador se encuentre una instrucción de retorno, ya que el S/O (Sistema Operativo) trata a nuestro programa como si se tratase de una subrutina suya; esto se verá más claramente cuando estudiemos el capítulo dedicado a las subrutinas.

Codificación hexadecimal
Con el procedimiento visto hasta ahora, utilizamos 10 números metidos en DATAs, para representar un programa de 10 bytes de longitud. Estas DATAs, nos ocuparán cerca de 70 bytes de memoria dentro del programa Basic; si tuviéramos que representar en DATAs un programa de 2K (2048 bytes), probablemente, no nos cabrían los DATAs en un 16K. Para evitar esta forma de malgastar la memoria, existe un procedimiento al que quizá esté acostumbrado el lector por los listados de nuestra revista, este procedimiento consiste en codificar el programa en hexadecimal, e introducirlo como una cadena de caracteres, que sólo ocupará en DATAs el doble de la longitud del programa. Veámoslo con un ejemplo:

Primero haríamos:

10 CLEAR 49999


De la misma forma que antes, pero esta vez, definiremos una función que nos ayude a decodificarlo.

20 DEF FN a(a$,n)=16+(CODE a$(
n)-48-7*(a$(n)>"9"))+(CODE a$(n+
1)-48-7*(a$(n+1)>"9"))


Puede parecer complicado, pero esta función nos ayuda a pasar los números de hexa a decimal antes de POKEarlos en las direcciones de memoria.

Usaremos también, una suma de comprobación (checksum) para detectar si nos equivocamos al teclear los DATAs. El programa seguiría:

30 READ a$,s: LET cs=0
40 FOR n=1 TO LEN a$-1 STEP 2
50 LET a=FN a(a$,n)
60 LET cs=cs+a
70 POKE 49999+n,a
80 NEXT n
90 IF cs<>s THEN PRINT "Error": STOP
100 RANDOMIZE USR 50005
110 DATA "0C415750445B1247211B"
120 DATA 552: REM Checksum


La línea 30 lee toda la cadena, la suma de comprobación y pone a cero el contador de checksum.

El bucle entre las líneas 40 y 80, va leyendo los caracteres de la cadena de checksum y finalmente, los introduce en la dirección adecuada.

En la línea 90, se detectan los posibles errores, comparando el contador de checksum con la suma correcta que está en la línea 120. Finalmente, la línea 100 ejecuta el programa de l misma forma que en el caso anterior.

La cadena de la línea 110, está compuesta por la representación hexadecimal de los números que componen el código máquina que queríamos introducir en el ordenador.

Dónde ubicar un programa en C/M
En principio, un programa en código máquina se puede colocar en cualquier lugar de la memoria, de hecho, existen programas comerciales que la ocupan prácticamente por completo. No obstante, para nuestros fines existen zonas más adecuadas que otras.

Se supone que un programador aficionado, utilizará rutinas en C/M combinadas con un programa principal en Basic, por lo que habrá que respetar una zona de memoria para que el Basic pueda trabajar.

Básicamente, existen cuatro zonas donde situar nuestros programas:

Por encima de la RAMTOP.
En el buffer de impresora.
En el archivo de pantalla.
Dentro del programa Basic.



Veámoslas una por una:

1. Por encima de la RAMTOP: Es la zona más adecuada para colocar un programa en C/M, ya que queda protegido de borrados por el sistema Basic. En primer lugar, deberemos bajar la RAMTOP con el uso de CLEAR, como se veía en el ejemplo anterior. Una vez cargado nuestro programa, no podrá ser borrado ni siquiera con NEW; para volver a la situación inicial, deberemos teclear:

RANDOMIZE USR 0


Que sí borrará el programa en C/M y todo lo que haya en la memoria del ordenador. Otra forma de destruir nuestro programa sería volver a subir la RAMTOP.

2. En el buffer de impresora: Existe en la RAM, una zona reservada de 256 bytes, que empieza en la dirección 23296 (5B00h) y acaba en la 23551 (5BFFh); esta zona la utiliza el Spectrum cuando trabaja con una impresora tipo ZX-Printer (Alphacom-32 o Seikosha GP-50S); si no va a utilizar ninguna de estas impresoras, puede almacenar en esta zona una rutina corta (256 bytes máximo) que no le ocupará, por tanto, memoria en la zona de programa. Tenga en cuenta, no obstante, que su rutina será borrada si utiliza los comandos: NEW, LPRINT, LLIST y COPY.

3. En el archivo de pantalla: En casos especiales, se utiliza el archivo de pantalla para almacenar programas en C/M, es una técnica usada en algunos copiadores para no ocupar memoria útil. Si no desea "ensuciar" la pantalla, puede poner los atributos correspondientes al mismo color de tinta y papel, con lo que los bytes no se visualizarán en forma de pixels. Cuando utilice esta técnica, tenga en cuenta que su programa puede ser corrompido por el uso de NEW, CLEAR y cualquier comando que afecte a la pantalla. El archivo de pantalla va desde 16384 (4000h) hasta 22527 (57FFh).

4. Dentro del programa Basic: Esta era la técnica usada en el ZX-81, consiste en hacer que la primera línea del programa sea una línea REM, con tantos espacios, como bytes tenga el programa C/M a almacenar. La dirección de inicio de esta zona es (PROG)+5. Este método tiene la ventaja de poder salvar juntos el Basic y su Código Máquina, si bien, su empleo no es recomendable si se tiene conectado el INTERFACE 1, ya que este dispositivo desplaza el programa Basic, y por tanto, nuestra rutina en C/M, a menos que esta sea reubicable y entremos en ella, calculando cada vez la dirección de entrada a partir del contenido de la variable PROG. En este caso, nuestra rutina sólo se borra editando la línea, o borrando el programa Basic con NEW.

De todos éstos, el sistema usado con más frecuencia es el primero, y es el que usaremos en nuestros ejemplos. Si se tiene conectado un interfce de impresora INDESCOMP, ha de tenerse en cuenta que su software ocupa los 1000 bytes más altos de la memoria.