Programação para Scripts¶
Recursos extensivos relacionados ao Python podem ser encontrados em http://www.python.org. Esta seção é destinada a ser uma introdução muito breve à linguagem para ajudar um usuário a ler e entender esta seção do manual.
Python ¶
Python é uma linguagem de script. Scripts são interpretados pelo mecanismo Python diretamente, sem a necessidade de etapas de compilação e ligação comuns a linguagens compiladas como C ou Java, portanto, a edição e execução podem ser realizadas diretamente dentro do Aimsun Next. Outras vantagens do Python sobre C++ incluem o fato de que não é necessário se preocupar com ponteiros e gerenciamento de memória.
Uma característica do Python que pode causar problemas, particularmente para programadores de outras linguagens menos rigorosas, é a importância da indentação na estrutura do programa. Onde outras linguagens usam chaves, {}, Python confia em uma indentação rigorosa para delimitar seções de código, final de laços, etc. Por outro lado, isso, pelo menos em teoria, torna o código mais legível, particularmente entre autores.
Conceitos Básicos¶
Qualquer coisa à direita de um hash (às vezes chamado de sinal de libra) é um comentário e não será interpretado na execução.
# Este é um comentário. Python não tentará interpretar isso
# print "Olá Mundo"
# nada acontece, a instrução de impressão está atrás de um comentário
Não há necessidade de declarar uma variável: ela é criada atribuindo um valor. Além disso, Python é uma linguagem de tipagem dinâmica, então diferentes tipos de dados podem ser atribuídos à mesma variável.
myInteger = 42 # um inteiro
myString = "Olá Mundo" # uma string
myPi = 3.142 # um float
myEmpty = None # um nulo
myInteger = myPi # agora myInteger é um float
Python contém as seguintes estruturas de dados básicas:
- Números, incluindo inteiros e ponto flutuante.
- Strings, encerradas por " " ou ' ', e incluindo caracteres especiais, ex. para iniciar uma nova linha.
- Booleano, Verdadeiro ou Falso.
- Listas, ex. myList = [item1, item2, item 3] onde os itens são acessados pelo índice no intervalo de 0 a (n-1), por exemplo, myList[1] retornaria item2.
- Dicionários, nos quais os valores são armazenados com uma chave e acessados pela chave que mapeia para o valor.
Por exemplo, o seguinte comando:
myAddresses = {'grail': 'Castelo Aargh', 'arthur': 'Camelot', 'knight ni': 'arbusto'}
criaria um mapa como segue:
Chave | Valor |
---|---|
grail | Castelo Aargh |
arthur | Camelot |
knight ni | arbusto |
Enquanto myAddresses['arthur'] retornaria 'Camelot'
Strings podem ser tratadas como listas de caracteres. As principais operações que funcionam com qualquer lista, mas são mais úteis para strings, são:
- myString = myString1 + myString2 : Cria myString como uma concatenação de duas strings.
- myString[i] : Retorna o caractere no índice i.
- myString[i,j] : Retorna uma substring do índice i até j-1.
- len(myString) : Retorna o comprimento de myString.
Conceitos Orientados a Objetos¶
Esta é uma introdução geral, e de forma nenhuma completa, aos conceitos orientados a objetos para ajudar um usuário a ler e entender esta seção do manual.
Classes¶
Uma classe é um plano, ou protótipo, que define variáveis e métodos comuns a todos os objetos de um certo tipo. Objetos são instâncias concretas de uma classe, um conjunto de métodos e atributos relacionados.
Exemplos de classes e objetos potenciais são dados abaixo:
Classe | Objetos |
---|---|
Tipo de Veículo | carro, lgv, hgv, ônibus, micro-ônibus |
Tipo de Carro | focus, golf, mini |
Carro | chittyChittyBangBang, knight 2000, M_33EJB |
Observe a convenção para nomear classes com a primeira letra em maiúscula e objetos com a primeira letra em minúscula.
O que constitui uma classe e o que constitui um objeto pode ser específico da aplicação. A tabela acima mostra como um esquema de classe pode ser usado para descrever tipos de veículos, subtipos de um tipo de veículo e, finalmente, veículos específicos.
Atributos¶
Atributos são valores que definem o objeto. Atributos são comuns a todos os objetos da mesma classe, embora seus valores sejam diferentes
Classe | Atributos |
---|---|
Veículo | rota, horario_inicio |
Tipo de Veículo | modo_transporte, pcus |
Tipo de Carro Privado | fabricante, modelo, peso, potência |
Carro Individual | dono, passageiros, numero_registro, cor, idade |
Os atributos de um objeto, se acessíveis publicamente, podem ser acessados pela convenção object.attribute, por exemplo, para obter a idade de um carro específico, usaríamos M_33EJB.age, ou para encontrar o peso de um Mini usaríamos mini.weight.
Métodos¶
Um método é uma função que o objeto é capaz de realizar. Objetos da mesma classe compartilham os mesmos métodos de classe. Métodos podem receber vários parâmetros como entradas e frequentemente retornam um valor. Métodos podem ser usados para:
- Obter um valor de um objeto: myCar.getNumberOfWheels().
- Definir um valor para um objeto: myCar.setMaximumPassengers(6).
- Fazer o objeto realizar alguma operação ou cálculo:
- myCar.accelerate(rateOfAcceleration, TargetSpeed).
- myCar.calculateMaximumSpeed().
- myCar.addPassengerToPassengerList("Alma Cogan").
Métodos acessíveis a clientes (outros objetos, ou você como programador) são métodos públicos. Atributos de classe, juntamente com alguns métodos internos, são frequentemente mantidos privados, e só podem ser acessados indiretamente, através de um conjunto bem definido de métodos públicos que formam a interface da classe. Esses métodos públicos podem impor alguma restrição para proteger os dados do objeto de corrupção e inconsistências.
Herdabilidade¶
A herdabilidade permite que novas classes herdem estado e comportamento de classes existentes, onde a nova classe é um subtipo lógico de sua classe pai. Da sua classe pai, ela herda métodos que pode substituir/reimplantar, e também atributos.
Por exemplo, um programador poderia definir classes separadas e não relacionadas para descrever carros, caminhões e ônibus. No entanto, essas classes de veículos compartilham métodos e atributos comuns e, para muitos aspectos no programa, seriam tratados da mesma forma. Portanto, poderiam ser modelados com a mesma classe e simplesmente conter um atributo que declare se são um "Carro", "Caminhão" ou "Ônibus", mas se quisermos oferecer métodos específicos para, por exemplo, ônibus, como pickUpPassenger(busStopNumber), então isso não seria adequado.
A herdabilidade resolve esse problema permitindo que uma classe pai genérica, Veículo, seja especificada, definindo todos os métodos comuns (ex. accelerate(parameters), brake(parameters)) e atributos (maxPower, length, weight). Esses podem então ser sobrescritos nas classes filhas para que o tipo de veículo ("Carro", "Caminhão" e "Ônibus".) possa substituir métodos ou atributos e fornecer funções ou valores mais apropriados, da mesma forma que um tipo de veículo específico (ou seja, o mini) poderia especializá-los ainda mais. Eles também podem ser estendidos em classes filhas para adicionar métodos e atributos específicos da classe. Uma classe tipo "ônibus" poderia estender a classe Veículo adicionando métodos e atributos para partida programada, horário e paradas de ônibus, que seriam irrelevantes para outros tipos de veículos.