User-defined data types · Tipos de dados definidos pelo usuário
| English | Português |
|---|---|
| user-defined types/ˈjuːzə dɪˈfaɪnd taɪps/ | tipos definidos pelo usuário |
| non-composite/nɒn ˈkɒmpəzɪt/ | não composto |
| composite/ˈkɒmpəzɪt/ | composto |
| enumerated type/ɪˈnjuːməreɪtɪd taɪp/ | tipo enumerado |
| pointer/ˈpɔɪntə/ | ponteiro |
| dereference/ˌdiːˈrefrəns/ | desreferenciar |
| record/ˈrekɔːd/ | registrar |
| set/set/ | estabelecido |
| class/klæs/ | classe |
| attributes/ˈætrɪbjuːts/ | atributos |
| methods/ˈmeθədz/ | métodos |
A type that makes the mistake impossible
- A hospital system stored a patient's blood group as a
STRING. Someone typed "0+" instead of "O+": a zero for a letter. The field accepted it, because a string accepts anything. - Nothing in the program could tell that "0+" was not a blood group, so the error travelled untouched to the point where it mattered.
- Give the field a type whose values are exactly the eight blood groups, and the assignment is rejected the moment it is written, by the compiler, before the program ever runs.
- That is what user-defined types 用户定义类型 buy you. This lesson is the ones the syllabus names, and how to choose between them.
Um tipo que torna o erro impossível
- Um sistema hospitalar armazenou o grupo sanguíneo de um paciente como uma
STRING. Alguém digitou "0+" em vez de "O+": um zero para uma letra. O campo aceitou, porque uma string aceita qualquer coisa. - Nada no programa podia dizer que "0+" não era um grupo sanguíneo, então o erro viajou intacto até o ponto onde importava.
- Dê ao campo um tipo cujos valores sejam exatamente os oito grupos sanguíneos, e a atribuição será rejeitada no momento em que for escrita, pelo compilador, antes do programa rodar.
- É isso que tipos definidos pelo usuário 用户定义类型 compram. Esta lição são as que o programa menciona, e como escolher entre elas.
Why user-defined types are needed
- A built-in
STRINGlets you store nonsense in a field that should hold one of a few legal values; a user-defined type restricts it, so the compiler catches more mistakes. - Real entities are usually a collection of values of different types, and a built-in type can hold only one.
DECLARE MyTaxi : Vehicleis self-documenting: it says what the variable is, whereDECLARE MyTaxi : STRINGsays only how it is stored.
Por que tipos definidos pelo usuário são necessários
- Uma
STRINGembutida permite armazenar nonsense em um campo que deveria conter um de poucos valores legais; um tipo definido pelo usuário restringe isso, para que o compilador capture mais erros. - Entidades reais geralmente são uma coleção de valores de diferentes tipos, e um tipo embutido pode conter apenas um.
DECLARE MyTaxi : Vehicleé autodocumentável: diz o que a variável é, ondeDECLARE MyTaxi : STRINGdiz apenas como ela é armazenada.
Why are user-defined types needed? Select all · todos that apply. · Por que tipos definidos pelo usuário são necessários? Selecione todos os que se aplicam.
Restriction, grouping and self-documentation. Speed is not the reason; correctness and clarity are. · Restrição, agrupamento e autodescrição. Velocidade não é a razão; correção e clareza são.
Non-composite types: enumerated
- A non-composite 非组合 type holds a single value; a composite 组合 type groups several values together.
- An enumerated type 枚举类型 has values that are a fixed list of named constants. The names are values of the new type, stored internally as small integers.
- Uses: days of the week, colours, status codes, blood groups: any field whose legal values are a short known list.
Six named values, and nothing else is assignable
Tipos não compostos: enumerados
- Um tipo não composto 非组合 armazena um valor único; um tipo composto 组合 agrupa vários valores juntos.
- Um tipo enumerado 枚举类型 tem valores que formam uma lista fixa de constantes nomeadas. Os nomes são valores do novo tipo, armazenados internamente como inteiros pequenos.
TYPE Vehicle = (M100, M230, T101, T102, T120, T150)
DECLARE MyTaxi : Vehicle
MyTaxi ← T102 // anything outside the list is rejected
- Usos: dias da semana, cores, códigos de status, grupos sanguíneos: qualquer campo cujos valores legais sejam uma lista curta conhecida.

Seis valores nomeados, e nada mais pode ser atribuído
An enumerated type holds: · Um tipo enumerado armazena:
An enumerated type restricts a variable to one of a fixed set of named values (e.g. days of the week). · Um tipo enumerado restringe uma variável a um conjunto fixo de valores nomeados (ex: dias da semana).
Non-composite types: pointer
- A pointer 指针 holds the memory address of another variable, or
NULLmeaning "no target". - To dereference 解引用 a pointer, written
p^, is to reach the variable it points at.
- Pointers are what make dynamic structures possible: a linked list is nodes joined by pointers, and a tree is nodes with two. They also pass a large record to a procedure without copying it.
The variable holds where the data is, not the data
Tipos não compostos: ponteiro
- Um ponteiro 指针 armazena o endereço de memória de outra variável, ou
NULLsignificando "nenhum alvo". - Para desreferenciar 解引用 um ponteiro, escrito
p^, é acessar a variável a qual ele aponta.
TYPE PNode = ^TNode // a pointer to a TNode
DECLARE p : PNode
p ← NEW TNode
p^.Value ← 42 // dereference, then reach the field
- Ponteiros são o que tornam estruturas dinâmicas possíveis: uma lista encadeada são nós ligados por ponteiros, e uma árvore são nós com dois. Eles também passam um registro grande para um procedimento sem copiá-lo.

A variável armazena onde os dados estão, não os dados
A pointer stores the memory address of another variable, and dereferencing it (e.g. p^) reaches the variable it points to. · Um ponteiro armazena o endereço de memória de outra variável, e sua desreferência (ex: p^) alcança a variável a que aponta.
Pointers (with NULL marking "points to nothing") are how dynamic structures like linked lists and trees are built. · Ponteiros (com NULL marcando "ponta para nada") são como estruturas dinâmicas como listas encadeadas e árvores são construídas.
Reaching the variable a pointer points at, written p^, is called ____. · Atingir a variável a que um ponteiro aponta, escrito p^, é chamado ____.
The pointer holds an address; dereferencing follows it to the data. That is how linked lists and trees are built. · O ponteiro armazena um endereço; desreferenciar o segue até os dados. É assim que listas ligadas e árvores são construídas.
Composite types
- A record 记录 groups fields of different types under one name, in a
TYPE … ENDTYPEblock. You met it in topic 10. - A set 集合 is an unordered collection of unique values, with the operations add, remove, membership test, union and intersection.
- A class 类 and its instances, objects, combine data fields, the attributes 属性, with the operations on them, the methods 方法.
Fields of different types, one identifier
Tipos compostos
- Um registro 记录 agrupa campos de tipos diferentes sob um mesmo nome, em um bloco
TYPE … ENDTYPE. Você o encontrou no tópico 10. - Um conjunto 集合 é uma coleção não ordenada de valores únicos, com operações de adicionar, remover, teste de pertinência, união e interseção.
DECLARE Available : SET OF Colour
Available ← {Red, Blue}
IF Green IN Available THEN
…
ENDIF
- Uma classe 类 e suas instâncias, objetos, combinam campos de dados, os atributos 属性, com as operações sobre eles, os métodos 方法.

Campos de diferentes tipos, um identificador
Match each user-defined type to what it holds. · Associe cada tipo definido pelo usuário ao que ele armazena.
Enumerated = fixed named values; pointer = an address; class = data + behaviour; set = unique unordered values. · Enumerado = valores fixos nomeados; ponteiro = um endereço; classe = dados + comportamento; conjunto = valores únicos não ordenados.
A set is an ordered collection in which a value may appear more than once. · Um conjunto é uma coleção ordenada na qual um valor pode aparecer mais de uma vez.
A set is unordered and its values are unique. An array is the ordered structure that allows repeats. · Um conjunto é não ordenado e seus valores são únicos. Um array é a estrutura ordenada que permite repetições.
The class
- A class is the definition; an object is an instance of it, one actual taxi with its own capacity.
- What distinguishes it from a record is the methods: a record is data alone, a class is data and the behaviour that belongs with it.
A classe
CLASS Taxi
PRIVATE Capacity : INTEGER
PUBLIC FUNCTION GetCapacity() RETURNS INTEGER
RETURN Capacity
ENDFUNCTION
ENDCLASS
- Uma classe é a definição; um objeto é uma instância dela, um táxi real com sua própria capacidade.
- O que a distingue de um registro são os métodos: um registro é apenas dados, uma classe é dados e o comportamento que pertence a ela.
A class combines: · Uma classe combina:
A class bundles attributes and methods; an object is an instance of a class. · Uma classe agrupa atributos e métodos; um objeto é uma instância de uma classe.
What distinguishes a class from a record? · O que distingue uma classe de um registro?
Both group fields; only the class carries behaviour. An object is one instance of the class. · Ambos agrupam campos; apenas a classe carrega comportamento. Um objeto é uma instância da classe.
Worked example: choose the type and justify it
- A booking system stores, for each booking, a status that must be one of Requested, Confirmed or Cancelled. Which user-defined type, and why?
- An enumerated type: the legal values are a short fixed list, so the type prevents any other value being assigned and the code reads as the domain does.
- And for the booking itself: a reference, a date, a passenger count and a price? A record, because the values are of different types and always describe one booking together.
- And for the set of seats still free? A set: unordered, no duplicates, and membership is the operation you need.
Exemplo resolvido: escolha o tipo e justifique
- Um sistema de reservas armazena, para cada reserva, um status que deve ser um de Solicitado, Confirmado ou Cancelado. Qual tipo definido pelo usuário, e por quê?
- Um tipo enumerado: os valores legais são uma lista fixa curta, então o tipo impede que qualquer outro valor seja atribuído e o código lê como o domínio faz.
- E para a reserva em si: uma referência, uma data, uma contagem de passageiros e um preço? Um registro, porque os valores são de tipos diferentes e sempre descrevem uma reserva juntos.
- E para o conjunto de assentos ainda livres? Um conjunto: não ordenado, sem duplicatas, e a pertinência é a operação que você precisa.
Choosing between them
| Need | Type |
|---|---|
| a value from a short fixed list | enumerated |
| indirection, or a structure that grows | pointer |
| several fields of different types describing one thing | record |
| an unordered collection of unique values | set |
| state and the behaviour that acts on it | class |
Escolhendo entre eles
| Necessidade | Tipo |
|---|---|
| um valor de uma lista fixa curta | enumerado |
| indireção, ou uma estrutura que cresce | ponteiro |
| vários campos de diferentes tipos descrevendo uma coisa | registro |
| uma coleção não ordenada de valores únicos | conjunto |
| estado e o comportamento que age sobre ele | classe |
Programming concept lab · Laboratório de conceito de programação
Connect examples to the programming idea they show. · Conecte exemplos à ideia de programação que eles mostram.
For a variable that must be one of {Red, Green, Blue}, the best type is: · Para uma variável que deve ser uma das opções {Red, Green, Blue}, o melhor tipo é:
A fixed list of allowed values is exactly what an enumerated type is for. · Uma lista fixa de valores permitidos é exatamente para o que um tipo enumerado serve.
Marks that slip away
- An enumerated type's values are named constants, not strings.
MyTaxi ← "T102"is a different thing and is wrong. - A pointer holds an address, not the value. Dereferencing is the step that reaches the value.
- A set is unordered with no duplicates; an array is ordered and may repeat. The question's wording tells you which.
- What makes a class more than a record is its methods. Say that when asked for the difference.
Marcas que escapam
- Os valores de um tipo enumerado são constantes nomeadas, não strings.
MyTaxi ← "T102"é algo diferente e está errado. - Um ponteiro armazena um endereço, não o valor. Desreferenciar é o passo que alcança o valor.
- Um conjunto é não ordenado e sem duplicatas; um array é ordenado e pode repetir. A formulação da questão diz qual escolher.
- O que torna uma classe mais do que um registro são seus métodos. Digam isso quando perguntados pela diferença.
You've got it
- user-defined types restrict what can be stored, group values that belong together, and make code self-documenting
- non-composite: enumerated (a fixed list of named constants) and pointer (an address, reached by dereferencing)
- composite: record (fields of different types), set (unordered, unique), class/object (attributes plus methods)
- choose from the need, and justify with the property that fits: a fixed list, indirection, mixed fields, uniqueness, or state with behaviour
Entendeu?
- tipos definidos pelo usuário restringem o que pode ser armazenado, agrupam valores que pertencem juntos, e tornam o código autodocumentável
- não compostos: enumerado (uma lista fixa de constantes nomeadas) e ponteiro (um endereço, alcançado por desreferenciamento)
- compostos: registro (campos de diferentes tipos), conjunto (não ordenado, único), classe/objeto (atributos mais métodos)
- escolha a partir da necessidade, e justifique com a propriedade que se encaixa: uma lista fixa, indireção, campos mistos, unicidade ou estado com comportamento