User-defined data types · Tipos de datos definidos por el usuario
| English | Español |
|---|---|
| user-defined types/ˈjuːzə dɪˈfaɪnd taɪps/ | tipos definidos por el usuario |
| non-composite/nɒn ˈkɒmpəzɪt/ | no compuesto |
| composite/ˈkɒmpəzɪt/ | compuesto |
| enumerated type/ɪˈnjuːməreɪtɪd taɪp/ | tipo enumerado |
| pointer/ˈpɔɪntə/ | puntero |
| dereference/ˌdiːˈrefrəns/ | desreferenciar |
| record/ˈrekɔːd/ | registro |
| set/set/ | conjunto |
| class/klæs/ | clase |
| 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.
Un tipo que hace imposible el error
- Un sistema hospitalario almacenó el grupo sanguíneo de un paciente como
STRING. Alguien escribió "0+" en lugar de "O+": un cero numérico por una letra. El campo lo aceptó, porque una cadena acepta cualquier cosa. - Nada en el programa podía detectar que "0+" no era un grupo sanguíneo válido, por lo que el error viajó sin ser detectado hasta el punto donde resultaba crítico.
- Asignar al campo un tipo cuyos valores sean exactamente los ocho grupos sanguíneos, y la asignación será rechazada en el momento mismo en que se escriba, por el compilador, antes de que el programa se ejecute siquiera.
- Eso es lo que obtienes con los tipos definidos por el usuario 用户定义类型. Esta lección cubre los tipos que menciona el plan de estudios y cómo elegir entre ellos.
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 qué se necesitan los tipos definidos por el usuario
- Un
STRINGintegrado permite almacenar sin sentido en un campo que debería contener uno de unos pocos valores legales; un tipo definido por el usuario lo restringe, para que el compilador capture más errores. - Las entidades reales suelen ser una colección de valores de diferentes tipos, y un tipo integrado solo puede contener uno.
DECLARE MyTaxi : Vehiclees autodocumentable: dice qué es la variable, mientras queDECLARE MyTaxi : STRINGdice solo cómo se almacena.
Why are user-defined types needed? Select all · todos that apply. · ¿Por qué se necesitan los tipos definidos por el usuario? Seleccione todos los que correspondan.
Restriction, grouping and self-documentation. Speed is not the reason; correctness and clarity are. · Restricción, agrupación y autocomentado. La velocidad no es la razón; la corrección y la claridad sí lo son.
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 no compuestos: enumerados
- Un tipo no compuesto 非组合 contiene un único valor; un tipo compuesto 组合 agrupa varios valores juntos.
- Un tipo enumerado 枚举 tipo tiene valores que constituyen una lista fija de constantes nombradas. Los nombres son valores del nuevo tipo, almacenados internamente como enteros pequeños.
TYPE Vehicle = (M100, M230, T101, T102, T120, T150)
DECLARE MyTaxi : Vehicle
MyTaxi ← T102 // anything outside the list is rejected
- Usos: días de la semana, colores, códigos de estado, grupos sanguíneos: cualquier campo cuyos valores legales sean una lista corta y conocida.

Seis valores nombrados, y nada más puede asignarse
An enumerated type holds: · Un tipo enumerado contiene:
An enumerated type restricts a variable to one of a fixed set of named values (e.g. days of the week). · Un tipo enumerado restringe una variable a uno de un conjunto fijo de valores nombrados (p. ej., días de la 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 no compuestos: puntero
- Un puntero 指针 contiene la dirección de memoria de otra variable, o
NULLque significa "sin destino". - Dereferenciar 解引用 un puntero, escrito como
p^, es acceder a la variable a la que apunta.
TYPE PNode = ^TNode // a pointer to a TNode
DECLARE p : PNode
p ← NEW TNode
p^.Value ← 42 // dereference, then reach the field
- Los punteros son lo que hacen posibles las estructuras dinámicas: una lista enlazada son nodos unidos por punteros, y un árbol son nodos con dos. También permiten pasar un registro grande a un procedimiento sin copiarlo.

La variable contiene dónde están los datos, no los datos
A pointer stores the memory address of another variable, and dereferencing it (e.g. p^) reaches the variable it points to. · Un puntero almacena la dirección de memoria de otra variable, y al desreferenciarlo (p. ej. p^) se accede a la variable a la que apunta.
Pointers (with NULL marking "points to nothing") are how dynamic structures like linked lists and trees are built. · Los punteros (con NULL marcando "apunta a nada") son la base de estructuras dinámicas como listas enlazadas y árboles.
Reaching the variable a pointer points at, written p^, is called ____. · Acceder a la variable a la que apunta un puntero, escrito p^, se llama ____.
The pointer holds an address; dereferencing follows it to the data. That is how linked lists and trees are built. · El puntero contiene una dirección; la desreferenciación la sigue hasta los datos. Así se construyen las listas enlazadas y los árboles.
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 compuestos
- Un registro 记录 agrupa campos de tipos diferentes bajo un mismo nombre, en un bloque
TYPE … ENDTYPE. Lo viste en el tema 10. - Un conjunto 集合 es una colección desordenada de valores únicos, con las operaciones agregar, eliminar, prueba de pertenencia, unión e intersección.
DECLARE Available : SET OF Colour
Available ← {Red, Blue}
IF Green IN Available THEN
…
ENDIF
- Una clase 类 y sus instancias, objetos, combinan campos de datos, los atributos 属性, con las operaciones sobre ellos, los métodos 方法.

Campos de diferentes tipos, un identificador
Match each user-defined type to what it holds. · Empareje cada tipo definido por el usuario con lo que contiene.
Enumerated = fixed named values; pointer = an address; class = data + behaviour; set = unique unordered values. · Enumerado = valores nombrados fijos; puntero = una dirección; clase = datos + comportamiento; conjunto = valores únicos no ordenados.
A set is an ordered collection in which a value may appear more than once. · Un conjunto es una colección ordenada en la que un valor puede aparecer más de una vez.
A set is unordered and its values are unique. An array is the ordered structure that allows repeats. · Un conjunto es no ordenado y sus valores son únicos. Un array es la estructura ordenada que permite repeticiones.
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.
La clase
CLASS Taxi
PRIVATE Capacity : INTEGER
PUBLIC FUNCTION GetCapacity() RETURNS INTEGER
RETURN Capacity
ENDFUNCTION
ENDCLASS
- Una clase es la definición; un objeto es una instancia de ella, un taxi real con su propia capacidad.
- Lo que la distingue de un registro son los métodos: un registro es solo datos, una clase es datos y el comportamiento que le corresponde.
A class combines: · Una clase combina:
A class bundles attributes and methods; an object is an instance of a class. · Una clase agrupa atributos y métodos; un objeto es una instancia de una clase.
What distinguishes a class from a record? · ¿Qué distingue a una clase de un registro?
Both group fields; only the class carries behaviour. An object is one instance of the class. · Ambos agrupan campos; solo la clase lleva comportamiento. Un objeto es una instancia de la clase.
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.
Ejemplo resuelto: elegir el tipo y justificarlo
- Un sistema de reservas almacena, para cada reserva, un estado que debe ser uno de Solicitada, Confirmada o Cancelada. ¿Qué tipo definido por el usuario y por qué?
- Un tipo enumerado: los valores legales son una lista corta y fija, por lo que el tipo impide que se asigne cualquier otro valor y el código se lee según el dominio.
- ¿Y para la reserva misma: un referencia, una fecha, un conteo de pasajeros y un precio? Un registro, porque los valores son de diferentes tipos y siempre describen una reserva juntos.
- ¿Y para el conjunto de asientos aún libres? Un conjunto: desordenado, sin duplicados, y la pertenencia es la operación que necesitas.
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 |
Elegir entre ellos
| Necesidad | Tipo |
|---|---|
| un valor de una lista corta y fija | enumerado |
| indirección, o una estructura que crece | puntero |
| varios campos de diferentes tipos que describen una cosa | registro |
| una colección desordenada de valores únicos | conjunto |
| estado y el comportamiento que actúa sobre él | clase |
Programming concept lab · Laboratorio de conceptos de programación
Connect examples to the programming idea they show. · Conectar ejemplos con la idea de programación que muestran.
For a variable that must be one of {Red, Green, Blue}, the best type is: · Para una variable que debe ser una de {Rojo, Verde, Azul}, el mejor tipo es:
A fixed list of allowed values is exactly what an enumerated type is for. · Una lista fija de valores permitidos es exactamente para lo que sirve un tipo enumerado.
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.
Errores comunes
- Los valores de un tipo enumerado son constantes nombradas, no cadenas.
MyTaxi ← "T102"es algo diferente y es incorrecto. - Un puntero contiene una dirección, no el valor. La dereferencia es el paso que accede al valor.
- Un conjunto es desordenado y sin duplicados; un array está ordenado y puede repetirse. La redacción de la pregunta te dirá cuál.
- Lo que hace que una clase sea más que un registro son sus métodos. Dilo cuando te pregunten la diferencia.
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
Lo has logrado
- Los tipos definidos por el usuario restringen lo que se puede almacenar, agrupan valores que pertenecen juntos y hacen que el código sea autodocumentable
- No compuestos: enumerado (una lista fija de constantes nombradas) y puntero (una dirección, accesible mediante dereferencia)
- Compuestos: registro (campos de diferentes tipos), conjunto (desordenado, único), clase/objeto (atributos más métodos)
- Elige según la necesidad y justifica con la propiedad que encaja: una lista fija, indirección, campos mixtos, unicidad, o estado con comportamiento