Jack é uma linguagem de programação desenvolvida no projeto Nand2Tetris com fins pedagógicos. Esta análise foca em conceitos de linguagens de programação - isto é, como a linguagem funciona, suas características, e como ela permite expressar ideias computacionais.
| Aspecto | Descrição | Impacto |
|---|---|---|
| Paradigma | Orientada a objetos baseada em classes | Modularização por objetos |
| Tipificação | Estática (tipos em tempo de compilação) | Possibilidade de detectar de erros de tipos em tempo de compilação |
| Sintaxe | Inspirada em Java | Familiar a programadores |
| Expressividade | Deliberadamente limitada | Foco no essencial |
| Sem Herança | Não suporta herança ou polimorfismo | Simplicidade estrutural |
Jack implementa um modelo de orientação a objetos baseado em classes, similar ao Java clássico:
┌─────────────────────────────────────────┐
│ MUNDO DE OBJETOS JACK │
└─────────────────────────────────────────┘
┌────────────────┐
│ CLASS │
│ (Molde) │
└────────────────┘
↓ instantiation
┌────────────────┐
│ OBJETO 1 │
│ (Instância 1) │
└────────────────┘
↓
┌────────────────┐
│ OBJETO 2 │
│ (Instância 2) │
└────────────────┘
Uma classe é um molde (ou blueprint) que define:
Exemplo Real:
class Circle {
// Variáveis de instância (estado)
field int x, y; // Centro do círculo
field int radius; // Raio do círculo
// Construtor (cria uma instância)
constructor Circle new(int cx, int cy, int r) {
let x = cx;
let y = cy;
let radius = r;
return this;
}
// Métodos (comportamento)
method void setRadius(int newR) {
let radius = newR;
return;
}
method int getArea() {
// Área = π * r² (simplificado: r * r)
return radius * radius;
}
}
Conceitos fundamentais: