domingo, 11 de maio de 2014

Tema 3 Estructura dun Programa en Pascal



Antes de comezar, que non vos asuste si a cantidade de coñecementos e conceptos que se expoñen a continuación vos parece excesiva. O propósito deste apartado é proporcionar unha visión global dun programa en Pascal. Aínda non temos a base suficiente para comprender en profundidade todos os compoñentes dun programa, pero é interesante ver o aspecto global.

A estrutura xenérica dun programa en Pascal sería a seguinte:

program nome_do_programa ;

uses
unidades;

const
const_1 = valor_1;
const_2 = valor_2;
type
tipos_definidos_polo_usuario;
var
declaración_de_variables;

{** Funcions e procedementos **}
procedure
definicions_de_procediementos;
function
definicions_de_funcions;
{** Corpo do programa **}
begin
sentenzas;
end.


Imos ir explicando cada unha desas partes.

program

Esta palabra marca o comezo do programa e vai acompañada do nome que lle imos dar o noso programa. Vai seguida de punto e coma que é o separador de sentenzas.
Un dos erros que debemos evitar é utilizar o nome do programa que aparece a continuación da palabra program noutros elementos do noso programa, polo tanto debe ser único en todo o desenvolvemento e non debe incluír espazos en branco nin caracteres que non pertenzan ao léxico da linguaxe. No apartado seguinte explícanse as regras para construír identificadores.

program exemplo;

uses

Esta palabra reservada vai seguida dos nomes das unidades (units) que utiliza o noso programa. Pero, que son as unidades? Son o que noutros ámbitos se coñecen coma bibliotecas. Son un conxunto de utilidades das que o programador pode dispor para construír o seu programa. Algunhas proporciónaas o entorno de programación e outras podelas construír ti mesmo ou proporcionalas un terceiro.

const, type e var

No noso programa precisaremos almacenar os nosos resultados no que se chaman variables e é posible que utilicemos valores (números, letras, etc.) que non cambien durante a execución do programa chamadas constantes. Por último é posible que o programador cree estruturas de datos (unha forma de agrupar información) axustadas as necesidades do seu programa dando lugar a os chamados tipos definidos polo ususario.

procedure e function

Cando en temas anteriores mencionabamos a programación modular afirmabamos que era recomendable descompor os programas en partes denominadas módulos ou subprogramas. A forma de descompor o programa en módulos que proporciona Pascal son as funcións e os procedementos.


begin-end

Este e o corpo do programa principal. É o lugar onde comeza a executarse o programa, e a palabra reservada end marca o seu fin. É o que e da en chamar módulo principal en teoría da programación.

Léxico dun programa en Pascal

Denominase léxico dunha linguaxe a todas aquelas palabras (tokens) que poda ter un programa. Co léxico constrúense os programas en Pascal. Dentro do léxico destacan:

  • Palabras reservadas
  • Identificadores
  • Comentarios
  • Separadores
  • Símbolos especiais


Palabras reservadas

Reciben este nome porque significan algo especial para o compilador. Xa vimos algunhas: program, var, const, procedure, function, begin, end.

O listado completo das palabras reservadas en Pascal non é moi extenso, aínda que hai que sinalar que os diferentes fabricantes de compiladores introduciron algunhas con obxecto de aumentar as prestacións da linguaxe Pascal. As que se consideran Pascal estándar son as seguintes:


and
array
begin
case
const
div
do
downto
else
end
file
for
function
goto
if
in
label
mod
nil
not
of
or
packed
procedure
program
record
repeat
set
then
to
type
until
var
while
with


Identificadores

Os identificadores permiten dalle nome a os diferentes elementos dun programa. O primeiro identificador que empregamos e o nome do programa que aparece xunto a sentenza program.
Por outra banda os identificadores permiten “bautizar” a os subprogramas (procedementos e funcións), a os tipos de datos e a os propios datos de cada programa: variables e constantes. Un identificador é unha cadea de caracteres que debe cumprir:

  1. Debe comezar por unha letra (a..z ou A..Z) e non pode conter espazos en branco.
  2. A partir do primeiro carácter están permitidos díxitos e o subliñado (_).
  3. Non se poden utilizar palabras reservadas como identificadores.

Si o noso programa intenta calcular o saldo medio dunha conta corrente, seguramente precisaremos un dato para almacenar ese saldo e o seu identificador podería ser:

saldo_medio

É importante que os identificadores teñan un certo nome significativo que reflicta o contido xa que isto axuda a hora de ler e modificar o código. Tamén é importante destacar que Pascal non destingue entre maiúsculas e minúsculas, polo tanto son o mesmo identificador saldo, Saldo, SALDO ou sAlDo.

Comentarios

Un comentario é un texto explicativo situado no código fonte do programa. Este texto é ignorado polo compilador pero facilita a lexibilidade e comprensión do código por parte de outro programador ou do propio autor unha vez transcorrido certo tempo dende o seu desenvolvemento. En definitiva é unha forma de incluír anotacións directamente sobre o código do programa.

E como distingue o compilador os comentarios do programa? Para que un texto se considere comentario debe ir encerrado entre (* e*):

(* Este formato é de comentario *)

Ou có seguinte formato adicional nos compiladores de Turbo Pascal:

{ Isto é un comentario }

Os comentarios son de gran importancia para dar claridade ao código e imprescindibles nas fases de posta a punto e mantemento.

Símbolos especiais

Son símbolos formados por un ou máis caracteres con un significado específico. Xa vimos algúns: o punto e coma como separador de sentenzas ou o punto final que da lugar a fin do programa. Tamén forma parte destes os operadores matemáticos:

< > . ; : { } [ ] + - * / <= >= # $

Separadores

Para que as palabras reservadas, identificadores ou símbolos sexan distinguibles uns dos outros fan falla separadores. En Pascal úsanse como separadores o espacio en branco, o tabulador ou o caracter de nova liña (Intro). Ademais os separadores permiten dar claridade a lectura do código.






O meu primeiro programa

Neste apartado editaremos o noso primeiro programa en Pascal.

Program Benvido;

Const

     OLA='Benvido ao mundo da programacion';

Var

     nome: string[40];

begin

     write('Introduzca o seu nome: ');
     readln(nome);
     writeln(OLA,' ', nome);
     readln;


end.

martes, 6 de maio de 2014

Tema 2.1 Exemplos de diagramas e pseudocódigo

Aquí vos deixo algúns exemplos de diagramas de fluxo e o seu correspondente pseudocódigo:


Título do exercicio-1: Desenvolva un algoritmo que permita ler tres valores e almacenalos nas variables A, B, C respectivamente. O algoritmo debe imprimir por pantalla cal e o valor meirande.

Este é o diagrama do exemplo que vimos no video do tema 2 (pincha video tema 2), deixovos o enlace por si queredes votarlle unha ollada.

De seguido o pseudocódigo deste programa:

  1. Inicio
  2. Inicializar as variables A, B, C
  3. Ler os tres valores
  4. Almacenar os valores nas variables A, B, C
  5. Si A > B e B > C Entón
  6. Escribir A "É o maior"
  7. Se non
  8. Si B > A e B > C Entón
  9. Escribir B "É o maior"
  10. Se non
  11. Escribir C "É o maior"
  12. Fin 
Recordemos a que chamabamos  algoritmo: dixemos que non é máis que unha serie de instruccións para resolver un problema.
Se vos fixades na cabeceira da páxina antes do diagrama de fluxo exponse o títuto que non e máis que unha declaración dun problema, neste caso queremos averiguar cal e o maior de tres valores.


Poñamos outro exemplo para que que de máis claro:

Título do exercicio-2: Desenvolva un algoritmo que realice a suma dos números comprendidos entre o 1 e o 10, é dicir, 1+2+3..+10 e imprima o resultado por pantalla.



E o pseudocódigo:

  1. Inicio
  2. Declaración e inicialización de variables N = 0 e Suma = 0
  3. Asignación contador N = N + 1
  4. Asigniación acumulador Suma = Suma + N
  5. Si N = 10 Entón
  6. Escribir Suma
  7. Se non, repetir dende o paso 3.
  8. Fin

Estes dous exemplos son unha pequena mostra de aquí en diante deberiades intentar realizar un diagrama de fluxo e o pseudocódigo de todos os programas de exemplo que aparezan ó longo do curso.







domingo, 20 de abril de 2014

Tema 2. Fases do desenvolvemeto do software

Fases do desenvolvemento do software

É demasiado frecuente que á hora de desenvolver un programa ou aplicación o programador comece a escribir liñas de código coma un poseso sen pararse a pensar que é o que quere facer, como o vai realizar e que problemas se vai atopar. Elaborar programas con este enfoque é máis unha tarefa artesanal que nos devolverán probablemente solucións inadecuadas. O habitual dende o punto de vista da enxeñaría do software é seguir unha metodoloxía con maior ou menor rigorosidade e precisión que sen dubida debe adaptarse as características e a natureza do proxecto. A grandes trazos e sen entrar en detalles que se sairían dos obxectivos deste curso, as fases que permiten chegar dende a formulación dun problema ata a obtención da aplicación informática que o resolve son os seguintes:

  • Análise e especificación de requisitos.
  • Deseño do programa.
  • Codificación do programa.
  • Proba do programa.
  • Mantemento do programa.

Análise e especificación de requisitos

Esta fase é fundamental á hora de afrontar a resolución de calquera problema. Consiste en realizar unha descrición clara e completa que adoita a comezar con unha descrición textual xeral que vai sendo refinada e concreta ata culminar coa enumeración dun conxunto de requisitos. Durante esta fase pódense utilizar numerosas técnicas de análise baseadas en gran medida en diagramas de representación de datos, as relacións existentes entre eles, o fluxo dos mesmos e os algoritmos de procesamento que os manipulan. O grao de precisión e refinamento de todos eles establece o grao de abstracción do análise e depende de numerosos factores entre os que destacan as características do propio problema ( non se require o mesmo análise para desenvolver un programa que resolva ecuacións de segundo grao que un que controle a aterraxe dunha aeronave) e a experiencia dos programadores.

O análise e a especificación de requisitos proporciona un documento que non só permite afrontar a tarefa de deseño seguinte senón que ademais é un documento que permite que os promotores e usuarios da aplicación podan comprobar si o analista comprendeu a natureza do problema que se pretende resolver. Nesta fase, polo tanto, é moi importante que participen tanto os desenvolvedores coma os propios promotores e usuarios. Esta fase e crucial para o éxito do proxecto e en resumo é a que permite determinar que hai que facer.

Deseño

Unha ves que o análise permita especificar o que “temos que facer” e os requisitos que deben cumprirse é o momento de determinar como o vamos realizar. Hai que determinar o método que vamos seguir para resolver o problema, que partes ou bloques vai ter o programa, que linguaxe de programación se vai utilizar, etc.

Débense ter en conta as seguintes premisas:

  • Por un lado procurar, na medida do posible, minimizar o custe, tamaño e tempo de execución daquilo que se estea a desenvolver. Non esquezamos que as empresas e os programadores intentar gañar cartos.
  • Por outro lado, obter a máxima facilidade de uso, fiabilidade, flexibilidade e sinxeleza de mantemento.
Codificación

Consiste en expresar a solución do problema en linguaxe de programación. Hai que destacar que ata esta fase non se escribe nin unha soa liña de código. Ademais , se as fases previas son correctas e completas, o traballo de codificación soe ser bastante directo.

Proba

Nesta fase, unha vez codificado e compilado o programa, búscanselle as “cóxegas” ó programa. O principal é probar que o programa funciona correctamente segundo as especificacións do cliente. Por elo de novo volve a tomar importancia a fase de análise xa que as probas deben estar dirixidas polo que alí se recolleu. De feito, a fase de proba soe estar definida durante o propio análise e na codificación realízanse algunhas probas específicas que permiten obter un código máis fiable. A fase de probas a pesar de que para os programadores noveis no soe ser moi atractiva porque entenden que o produto xa está elaborado, resulta crucial para que o programa ou aplicación poda poñerse en produción (en uso real) coas mínimas garantías de seguridade. Durante esta fase débense avaliar tamén as situacións non previstas no uso normal pero que podan producirse durante o uso do mesmo.

Para que se faga unha idea do importante desta fase, nas empresas de certo tamaño as persoas que desenvolven o programa son distintas das que o proban. E en aplicacións con risco para a vida humana (hospitais, centrais nucleares, aeroportos, etc.) a fase de proba pode supoñer un 80% do tempo total de desenvolvemento.

Mantemento

Unha vez se probou suficientemente o programa entrégaselle ao cliente. Este úsao e o ideal é que nun principio quede satisfeito co resultado. Non obstante e a pesar de todos os esforzos, os análises concienciudos e as probas, poden aparecer erros que impliquen labores de mantemento correctivo. Por outro lado, co paso do tempo poden aparecer especificacións que non estaban contempladas no análise ben porque son novas ou por cambios en factores externos, dando lugar á necesidade de realizar operacións de mantemento adaptativo. Ademais pode ser prudente realizar modificacións en previsión de problemas que aínda non se produciran podan ser froito de problemas nun futuro dando lugar as operacións de mantemento predictivo.

Desenvolvemento en fervenza

Os ciclos de vida no desenvolvemento dunha aplicación poden seguir diferentes enfoques, aínda que nunha primeira toma de contacto co mundo da programación, o modelo máis utilizado é o denominado ciclo en fervenza, no que se realiza cada fase de forma secuencial pero con certo grao de solapamento ( inícianse etapas antes de rematar as anteriores) e con carácter cíclico (volvese a etapas anteriores). Aínda que no ciclo ideal, as fases deben suceder unha trala outra, o normal é que haxa a mencionada realimentación e solapamento. Sen ir máis lonxe, se atopamos erros na fase de probas teremos que regresar a fase de codificación, e si o erro e de deseño ou de análise, teremos que regresar as primeiras fases e reformular a nosa solución. Este ciclo de vida non é o único pero para o nivel deste curso é suficiente.

Durante o ciclo de vida dun desenvolvemento cada fase xera un conxunto de documentos que permiten afrontar as fases seguintes e que finalmente constitúe a documentación asociada ao proxecto que e crucial para afrontar todas as operacións de mantemento. A documentación debe incluír manuais para os diferentes tipos de usuarios (administradores, programadores e usuarios finais).
Concepto de Algoritmo
Defínese Algoritmo coma o conxunto de pasos necesarios para resolver un problema.
Pola súa natureza o algoritmo e previo ao programa, de feito pódese definir programa coma un algoritmo expresado nunha linguaxe de programación determinada. O algoritmo asociado a un problema non é único polo que convén analizar en detalle as diferentes opcións antes de tomar unha decisión. O algoritmo debe ser independente da linguaxe de programación na que se queira desenvolver e da máquina ou ordenador no que posteriormente se execute o programa, aínda que certamente a medida que se descende no nivel de abstracción e se concretan os detalles do algoritmo poden aparecer técnicas asociadas a linguaxe de programación coa que se ten previsto implementar a solución.

Exemplo de algoritmo

Deséxase resolver o seguinte problema: calcular o valor medio dunha serie de números positivos que se leen dende o teclado. Un valor cero ou negativo indicará o final da serie. O texto anterior constitúe o enunciado do problema que se desexa resolver e polo tanto e a especificación “en bruto” que debe ser refinada. A natureza de cada problema é diferente e polo tanto o programador non ten porque coñecer os detalles e os métodos asociados a cada problema. Isto fai preciso engadir información que explique con precisión o proceso ao que se someterán os datos de entrada para proporcionar os resultados de saída. Neste exemplo: o valor medio dun conxunto de números é o resultado de sumalos e dividir esa suma polo número de elementos. Polo tanto precisamos ir contando o número de valores que se suman e ir acumulando a suma. Con toda esta información proponse o seguinte algoritmo expresado en linguaxe “casi-verbal” coñecido coma pseudocódigo.

Algoritmo:

  1. Inicio
  2. Poñer o contador de números (C) e a suma (S) a cero
  3. Ler un número
  4. Si o número é positivos

1. Sumar o número a suma S
2. Incrementar en 1 o contador C
3. Ler o seguinte número
4. Ir ao paso 3
5. Calcular o valor medio (S/C)
6. Escribir o valor medio
7. Fin


Podemos observar que só pasaremos ao punto 4 (calcular o valor medio) cando ao executar o paso 3 o número non sexa positivo.

Observemos nesta táboa como se van modificando S e C a medida que imos lendo valores, utilizando para elo unha secuencia de números de entrada calquera (3,5,4,9,8,6,-2).

    ENTRADA S C S/C
    0 0
    3 0+3=3 0+1=1
    5 3+5=8 1+1=2
    4 8+4=12 2+1=3
    9 12+9=21 3+1=4
    8 21+8=29 5+1=5
    6 29+6=35 5+1=6
    -2 35 6 35/6=5,83


Características dun algoritmo


Un algoritmo debe ser:


  • Preciso (instrucións claras e concretas) e ordenado.
  • Determinista (que o resultado sexa o mesmo ao executalo varias veces cos mesmos datos de entrada).
  • Finito (que remate a súa execución baixo as condicións previstas).


Ademais, o deseño dun algoritmo:


  • Debe ser descendente, de arriba cara abaixo (top-down), dividíndose o problema en subproblemas.
  • Debe presentar un grao de refinamento sucesivo, e dicir, trátase de ir detallando a descrición en cada paso.
  • A representación do algoritmo, de cara a súa especificación mediante unha ferramenta de programación, farase mediante diagramas e/ou pseudocódigo.


Intentemos explicar estas características con outro exemplo:


Supoñamos que o problema a resolver sexa calcular o volume dun cilindro.
E para que? No noso caso imos instalar uns paneis solares para quentar auga, e temos o tamaño do depósito, pero non o da auga que é capaz de conter.


Por sorte, revisando un vello libro de xeometría, atopamos que o volume dun cilindro é o resultado de multiplicar a súa base pola súa altura. E cal é a súa base? Houbo sorte, na mesma páxina atopamos que a base obtense multiplicando o radio ao cadrado pola constante PI. Problema resolto!.


A hora de trasladar este razoamento ao mundo da programación comezaríamos por dividir o problema en subproblemas, os cales poderían ser:


  • Ler os datos
  • Realizar os cálculos
  • Escribir os resultados


Ben parece sinxelo. Temos claramente diferenciadas tres partes do programa.
Divide e vencerás!


Agora faise necesario ir detallando un pouco máis as partes anteriores. Isto é o que chamamos refinamento sucesivo. Unha posibles solución sería a seguinte:


  • Ler datos estaría composto por outras subtarefas que serían:


- Ler Radio
- Ler Altura h
  • Realizar cálculos descomporíase en:
- Calculala base = PI * r * r
- Calculalo volume = base * h
  • Escribir resultado que daría simplemente:


- Escribir volume




Representación de Algoritmos


Estudamos que un algoritmo debe ser independente da linguaxe de programación que posteriormente se utilice (con algúns matices). Isto implica que o método que usemos para a representación dun algoritmo tamén debe ser independente da linguaxe de programación.


Tradicionalmente utilizáronse dúas formas para representar algoritmos, aínda que actualmente existen multitude de técnicas tan gráficas coma textuais que están deseñadas para representar diferentes aspectos dos algoritmos e dos datos asociados a unha aplicación. Non obstante nunha primeira aproximación ao mundo da programación as máis destacadas son as seguintes:


  • Diagramas de fluxo
  • Pseudocódigo


A primeira delas é unha forma de representación gráfica das estruturas de control que terá o noso programa e que estudaremos no tema Estruturas de control. A segunda consiste en crear unha linguaxe de programación xenérica que poda ser trasladada con facilidade a calquera outra linguaxe de programación.
Esta linguaxe polo seu enfoque é unha pseudo-linguaxe similar a que usamos en exemplos previos e que será a que usemos neste curso.


Diagramas de fluxo


Utiliza símbolos (caixas de distinta xeometría) unidos por frechas (liñas de fluxo) que indican a orde ou dirección do fluxo do programa.

Algúns dos símbolos que se utilizan son:





Programación Modular e Estruturada


Neste apartado estudaremos: os dous paradigmas da programación máis empregados, aínda que non son os únicos, que están baseados por un lado na descomposición dun determinado problema en módulos independentes (programación Modular), e a programación de cada módulo mediante métodos estruturados (Programación Estruturada).


O primeiro fundamentase no sabio consello de “divide e vencerás”, mentres que o segundo fundamentase en que calquera0 algoritmo pode ser elaborado empregando exclusivamente tres estruturas básicas de control. Imos analizar un pouco máis estes conceptos.


Programación Modular


Neste paradigma:


  • O programa divídese en módulos independentes casa un dos cales executa unha determinada tarefa e resolve un problema concreto.
  • Existirá un módulo denominado módulo principal que será o encargado de transferir o control a os demais módulos (denominados submódulos). A súa función principal e a de ser o fío condutor do programa.
  • Ao ser os módulos independentes pódense desenvolver e probar ao mesmo tempo e con alta independencia. O obxectivo e concibir módulos independentes uns de outros e con alta cohesión (cada módulos serve para algo en concreto).
  • As vantaxes serán unha maior claridade e lexibilidade, gran facilidade para modificar os programas e redución de custo de desenvolvemento.




Por outra parte, si hai partes ou cálculos do noso programa que se repiten, codificaranse coma módulo unha única vez e chamarase varias veces a ese módulo dende onde faga falla. Os módulos reciben datos de entrada denominados parámetros que so procesados internamente para devolver un conxunto de resultados. Obviamente tanto os parámetros coma os resultados non son sempre imprescindibles.


A programación Modular segue sendo un deseño descendente (top-down) que significa que primeiro débese especificar que é o que se quere facer globalmente e a continuación vaise dividindo esa tarefa principal en subtarefas, cada unha das cales da lugar a un ou varios módulos. Esta técnica require de un refinamento sucesivo ata chegar a un nivel de subtarefas abordables don facilidade.


Programación Estruturada


A programación Estruturada parte da premisa que afirma que calquera algoritmo pode ser organizado utilizando exclusivamente tres estruturas de control:


  • Secuencial
  • Selectiva
  • Repetitiva



Utilizar as técnicas da programación estruturada implica unha diminución no tempo que se dedica á verificación, depuración e mantemento das aplicacións. Isto implica menor custo de desenvolvemento e maior calidade no produto.

sábado, 19 de abril de 2014

Tema 1 Unha pequena Introdución

Clasificación

Clasificar nunca é sinxelo pois require establecer de primeiras uns criterios concretos que permitan dividir en clases ou tipos o conxunto de elementos a clasificar. Dado que e moi frecuente que estes elementos teñan aspectos comúns, outros con certos matices e outros claramente diferentes, a clasificación pode non ser sempre tan rigorosa como cabe pensar. Imos realizar varias clasificacións das linguaxes de programación en función de diferentes criterios:

Segundo a súa proximidade á linguaxe máquina:

Linguaxes de baixo nivel: Son diferentes para cada procesador, cada tipo de computadora posúe o seu. Controlan directamente o recursos de hardware da máquina. Como exemplos temos a linguaxe máquina e a linguaxe ensambladora (Assembly).

Linguaxes de medio nivel: Tal e como reflexa o seu nome este grupo contén aquelas linguaxes que teñen características dos de baixo nivel e outras dos de alto nivel. O exemplo máis representativo e a linguaxe C.


Linguaxes de alto nivel: Son independentes do procesador. Son máis sinxelos e lexibles pero xeran un código moito menos eficiente (velocidade e tamaño) que os de baixo nivel. Para poder executalos precisan dun procesador que trate unha vez o código e xere un programa executable por un procesador (compiladores) ou ben o interprete liña por liña cada vez que se executan (intérpretes). Exemplos Pascal, php, Java, etc.


Segundo o propósito da linguaxe:
Linguaxes de propósito xeral: como Pascal, o C ou incluso Java aínda que este último se relaciona moito coas aplicacións empresariais.

Linguaxes de propósito especifico: php orientado o desenvolvemento de aplicacións web, LISP orientado a intelixencia artificial, etc.


Segundo a súa orientación:
Linguaxes orientadas ao procedemento: son linguaxes imperativos coma Pascal nos que se describen os pasos que deben darse para resolver un problema determinado. Explicase como resolver un problema.
Linguaxes orientadas ao problema: coma por exemplo Prolog. Nestas linguaxes descríbese o problema en si; son de tipo declarativo.

Linguaxes orientadas a obxectos: son linguaxes nas que se modela a realidade centrándose nos elementos que a compoñen.

Neste curso estudarase unha linguaxe de alto nivel, de propósito xeral e orientada ao procedemento imperativo: a linguaxe Pascal.




Linguaxes de alto nivel

As linguaxes de alto nivel buscan:

  • Sinxeleza: ser un medio sinxelos para expresar a solución de problemas.
  • Simplicidade: contar cun conxunto reducido de operacións básicas e un conxunto de regras para combinar as anteriores.
  • Eficiencia: de maneira que permitan una tradución rápida e un código máquina o máis eficientes posible.
  • Lexibilidade: facendo máis doada a comprensión do código e presentando a posibilidade de engadir comentarios que aínda que non aportan nada ao propio programa, permite que outros programadores ou incluso o mesmo autor transcorrido o tempo poidan comprender o seu contido con facilidade. Todo isto fai que sexa máis doado depurar ou modificar o códigos incluso por persoas que non o realizaron.
  • Portabilidade: as linguaxes de alto nivel son independentes da máquina para a que se estea a facer un determinado desenvolvemento. Isto permite que o esforzo de programación non estea condicionado pola variedade de plataformas nas que se desexa executar.


Características das linguaxes de alto nivel

As características máis importantes que deben presentar este tipo de linguaxes son as seguintes:

  • Utilizar un xogo de caracteres determinado (por exemplo non admiten o “ñ”) e un xogo de palabras reservadas que constitúen o léxico da linguaxe.
  • Presentar unhas regras sintácticas de maneira que a portabilidade das linguaxes de alto nivel son independentes da máquina para a que se estea a facer un determinado desenvolvemento estrutura dos programas debe cinguirse as mesmas. Estas regras conforman a gramática da
    linguaxe.
  • Ter capacidade para realizar operacións de tipo aritmético, relacionais e lóxicas incluíndo o tratamento de cadeas de texto.
  • Ter capacidade para bifurcar ou repetir o código (ou partes del) no lugar de executalo sempre secuencialmente.
  • Ter facilidades para a programación modular baseada en subprogramas.

Vexamos a continuación que elementos son necesarios para a realización dun programa.


Ámbitos de programación

Un ámbito de programación é un programa ou conxunto de programas que engloban todas as tarefas
necesarias para o desenvolvemento dun programa ou aplicación. Estas tarefas son basicamente as seguintes:
  • Edición do programa.
  • Compilación e enlazado.
  • Execución.
  • Depuración.

Hai quen ademais inclúe a creación de documentación complementaria que facilita o mantemento do programa dentro desas funcións.
Este tipo de ámbitos incorporan numerosas ferramentas, utilidades, aplicacións xa desenvolvidas, exemplos, titoriais, etc. Todas elas encamiñadas a facilitar e mellorar o desenvolvemento.


Editores

O primeiro elemento necesario par o desenvolvemento dun programa e un editor de texto. Un editor e un programa que nos permite escribir (editar) as instrucións do programa e posteriormente gardar o programa nun ficheiro nun soporte de almacenamento. Pódese utilizar calquera editor de texto para editar programas coa única precaución de que a hora de gardar, salvar ou almacenar o programa so se almacene o texto sen opcións de formato: grosa, estilos, itálica, etc.

O normal é utilizar un editor especialmente preparado para a programación. Estes teñen facilidades para a corrección de erros, destacan as palabras da linguaxe en cores, e en xeral facilitan a labor do programador.

Procesadores da linguaxe: tradutores, compiladores e intérpretes.

Unha vez editado o noso programa é necesario que este sexa procesado e transformado en ordes que
podan ser executadas polo ordenador. Estas ordes polo tanto deben estar na única linguaxe que a máquina entende: o código máquina. Para elo son necesarios os procesadores da linguaxe cuxo concepto é moi amplo. Dentro dos procesadores da linguaxe destacan os tradutores, os compiladores e os intérpretes.

Un compilador e un programa cuxo cometido é realizar a conversión dun programa escrito nun linguaxe de programación ao seu correspondente equivalente en linguaxe máquina. O resultado que devolve o compilador e un programa que xa pode ser executado polo ordenador destino sen necesidade de que o compilador estea presente. Por exemplo, en linguaxe Pascal ou a linguaxe C son linguaxes de programación que precisan ser compilados. Cando a conversión se realiza entre a linguaxe ensamblador e o código máquina, o compilador recibe o nome específico de Ensamblador.

Un intérprete e un programa que convirte liña por liña o programa escrito nunha linguaxe de programación e que a medida que realiza a conversión executa as instrucións. Evidentemente o intérprete non devolve nada xa que a execución realizase de forma simultánea. Por este motivo, o intérprete debe estar presente durante a execución. Linguaxes de programación que tradicionalmente son interpretados son o LISP e o BASIC.

Un tradutor e o nome que reciben aqueles procesadores da linguaxe que converten programas de unhas linguaxes a outras pero no xeran código máquina. Por exemplo hai tradutores de Pascal a C e viceversa.

Hai outras linguaxes de programación que combinan ambas estratexias como por exemplo sucede ca linguaxe de programación Java. Para esta linguaxe existen tradutores que xeran un programa nun código denominado intermedio que logo será executado a través dun intérprete que recibe neste caso recibe o nome de máquina virtual de Java.


Enlazadores

Por simplificación e para facilitar a comprensión dos conceptos anteriores sinalouse que os compiladores e os ensambladores (caso particular do compilador) xeran código máquina que pode ser executado polo ordenador. Sen embargo isto non e totalmente certo xa que hai unha etapa de enlazado que debe ser realizada por outro programa denominado enlazador (linker). O habitual e que durante a escritura dun programa sexa necesario utilizar outros subprogramas en forma de bibliotecas de funcións ou ben que o propio programa estea formado por realmente por varios programas almacenados en diferentes ficheiros. Esta situación fai que durante a compilación de cada módulo non se coñeza con exactitude a situación das instrucións do resto de programas ou bibliotecas de funcións. É frecuente que o enlazado sexa un paso máis da compilación e que se execute inmediatamente tras a compilación de todos os ficheiros.

É habitual denominar a cada un dos ficheiros que participan no desenvolvemento dun programa con nomes xenéricos que identifican en que fase se atopan. Por exemplo, as instrucións que escribe directamente o programador e que forman o programa na linguaxe de programación escollida coma ficheiros fonte (source file). O resultado da compilación destes programas denomínase ficheiro obxecto (object file) e por último o resultado do enlazado ficheiro executable (executable file). É este último o único que pode entender o ordenador sen a presenza do compilador. No caso de linguaxes interpretados o ficheiro fonte e directamente interpretado e executado polo interprete.


Depuradores


Unha vez editado e compilado o programa é necesario executalo (run en inglés), pero o é habitual que durante o desenvolvemento dunha aplicación se xeren ficheiros executables que aínda que sexan correctos dende un punto de vista sintáctico non realicen o que realmente se agarda deles polo que se considera que non funcionan correctamente. Os depuradores (debuggers) son capaces de executar o programa paso a paso incluíndo ademais un conxunto de facilidades que permiten observar o valor das variables e estruturas de datos permitindo así unha mellor localización de erros non evidentes.