HomePage RecentChanges

Lesson01

Apresentação e funcionamento

Primeiro exemplo em Python

[aplf@darkstar ~]$ python3
Python 3.4.3 (default, Mar 16 2015, 10:22:24) 
[GCC 4.8.2] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> print("Olá mundo!")
Olá mundo!
>>>

Ambiente de desenvolvimento

Nas aulas de FP poderemos trabalhar em ambiente Microsoft Windows ou em ambiente Unix-like. Os computadores disponíveis nos laboratórios têm em geral uma distribuição de Linux instalada, em que os ficheiros de cada utilizador são guardados num sistema de armazenamento central ao IST e, portanto, os ficheiros de cada utilizador estão disponíveis de forma transparente em qualquer computador nos laboratórios ou em qualquer servidor integrados neste sistema. Os computadores disponíveis nos laboratórios têm também em geral Microsoft Windows instalado e os ficheiros de cada utilizador são armazenados centralmente neste mesmo esquema.

Para que um utilizador do IST consiga aceder aos computadores nos laboratórios, e também aos servidores disponíveis, deverá activar pelo menos os serviços de afs e shell no self service da DSI.

Depois de activar estes serviços, passamos a ter acesso aos computadores nos laboratórios em qualquer dos sistemas operativos, e temos ainda acesso a um serviço de shell remoto. Para termos acesso a esse serviço e a partir do nosso computador pessoal bastará utilizar um cliente de ssh e um cliente de sftp. Este último permitirá aceder aos ficheiros que temos na área pessoal no sistema AFS.

Num ambiente Unix-like, seja uma distribuição de Linux ou um ambiente OS X, temos em geral um cliente de ssh sempre disponível, o comando ssh. No caso de termos um ambiente Microsoft Windows podemos utilizar o PuTTY. No que diz respeito a clientes de sftp, em ambientes Unix-like podemos utilizar os comandos scp e/ou sftp. No entanto, em ambiente Microsoft Windows, em que estes comandos não estão em geral disponíveis, ou se preferirmos utilizar um cliente com interface gráfica em ambientes Unix-like, podemos utilizar por exemplo a ferramenta FileZilla. Na realidade existem inúmeras alternativas para estes clientes e a escolha recai normalmente sobre preferências pessoais. Podemos encontrar algumas alternativas nas páginas referenciadas acima e também na colecção de software incluída no OpenDisc.

Ainda que a utilização dos clientes anteriores nos permita aceder a computadores de laboratório e servidores em que existem todas as ferramentas necessárias a FP, podemos também optar por instalar essas ferramentas no nosso computador.

Ferramentas que vamos utilizar em FP:

Para além destas ferramentas poderemos utilizar um editor de texto. Qualquer editor de texto serve para o que pretendemos. Sugerimos que quem opte por trabalhar remotamente num dos servidores e que não tenha experiência com editores de texto mais avançados, utilize o editor de texto nano.

Caso optemos por instalar no nosso computador uma distribuição de Linux, é importante notar que existem inúmeras distribuições de Linux e que a escolha de uma delas é uma questão de preferência de cada um. Por outro lado, ainda que hoje em dia as máquinas virtuais facilitem a vida, a instalação e configuração de uma distribuição de Linux, tal como acontece com qualquer outro sistema operativo, requer algum tempo de aprendizagem e a aquisição de experiência, o que não é objecto de estudo em FP.

Exemplo com acesso remoto

Neste exemplo vamos utilizar o servidor sigma.ist.utl.pt, mas poderíamos utilizar igualmente o servidor nexus.rnl.ist.utl.pt.

[aplf@darkstar ~]$ ssh ist14152@sigma.ist.utl.pt  
ist14152@sigma.ist.utl.pt's password:
ist14152@sigma04:~$ python3.4
Python 3.4.2 (default, Oct  8 2014, 10:45:20) 
[GCC 4.9.1] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> print("Olá mundo!")
Olá mundo!
>>>
# Ctrl-D to exit
ist14152@sigma04:~$ cat > ola.py << 'EOF'
print("Olá mundo!")
EOF
ist14152@sigma04:~$ python3.4 ola.py 
Olá mundo!
ist14152@sigma04:~$ nano ola.py
# Ctrl-X to exit
ist14152@sigma03:~$ logout
Connection to sigma.ist.utl.pt closed.
[aplf@darkstar ~]$

Mais exemplos

Notas a respeito da comunicação com o corpo docente

Utilizem por favor o endereço de email do IST sempre que possível. Caso queiram saber como redirecionar o mesmo para outros serviços que utilizem, perguntem por favor!

Problemas, algoritmos, computadores e programas

Problema: Como em qualquer engenharia, resolver problemas é o nosso principal objetivo. Um problema é caracterizado pelas suas instâncias e requer uma resposta a uma questão e/ou a otimização de um ou mais objetivos. A resolução de um problema passa pela compreensão e especificação do mesmo, em que as instâncias são identificadas e descritas com precisão, seguindo-se a modelação e desenvolvimento de uma solução. Uma vez a solução desenvolvida e formalizada, passa-se à concretização da mesma e validação da mesma. No caso da engenharia informática, a validação da solução pode ser feita a priori através de correção/desenvolvimento formal e/ou a posteriori através de verificações e testes.

Algoritmo: Neste âmbito, a solução de um problema consiste num algoritmo, i.e., uma sequência finita de instruções bem definidas e não ambíguas, executáveis num período de tempo finito e com uma quantidade de esforço finita. Um algoritmo é rigoroso, eficaz e termina. Um algoritmo diz-se correto para um dado problema se produz um resultado correto para qualquer instância desse problema.

Computador: O computador é uma máquina que manipula representações simbólicas em geral com um significado associado, i.e., informação. Notar que um computador manipula informação, não armazena e transmite apenas a mesma. Esta manipulação segue um conjunto de instruções, i.e., um programa. Os computadores são automáticos, universais, e em geral eletrónicos e digitais. Notar que os computadores têm algumas limitações inerentes ao modelo de computação em questão. Os computadores que utilizamos no nosso dia a dia são equivalentes à máquina de Turing e a outros modelos equivalentes, como a Random-Access Machine (RAM). As limitações destes modelos foram estudados por vários matemáticos no início do século 20 e, ainda que tendo por base diferentes modelos, acredita-se hoje que a classe de funções computáveis por um computador é a classe de funções parcialmente recursivas, facto expresso na tese de Church-Turing. A implicação imediata é que qualquer computação pode ser baseada num pequeno número de operações: operações de entrada e saída de dados, operações aritméticas elementares, execução condicional e repetição.

Programa: A concretização de algoritmo, ou composição de algoritmos, numa dada linguagem de programação designa-se por programa. A execução de programa conduz a um processo computacional, i.e., um ente imaterial que evolui ao longo tempo, executando um dado algoritmo. A atividade de desenvolver programas designa-se por programação.

Linguagem de programação: Uma linguagem de programação é uma linguagem utilizada para escrever programas de computador. Existem muitas linguagens de programação dividas em várias classes. Por exemplo, linguagens máquina, linguagens "assembly" e linguagens de alto nível. O Python é um exemplo de linguagem de alto nível. Estas classes estão relacionas com os vários níveis de abstração que temos num computador, nomeadamente hardware, sistema operativo, ambiente nativo e ambientes virtuais. As linguagens de programação "assembly" e de alto nível têm de ser traduzidas para linguagem máquina para que um computador as possa entender. Esta tradução pode ocorrer por dois processos, compilação e interpretação. As linguagens de programação são em geral descritas lexicalmente por expressões regulares e gramaticalmente por gramáticas, e.g., através da notação BNF (Backus Normal Form ou Backus–Naur Form).

Informação mais completa na referência principal da disciplina, "Programação em Python: Introdução à programação com múltiplos paradigmas", João P. Martins 2015 IST Press, primeiro capítulo.