Я пытаюсь смоделировать три сущности в Аде: Person
, Woman
и Man
.Я хочу, чтобы у Person
было одно поле Gender
, которое должно быть Unknown
для Person
, Male
для Man
и Female
для Woman
.
Я хочуреализовать Man
и Woman
как Person
производные типы, чьи поля Gender
равны Male
и Female
соответственно.
Кроме того, я хочу, чтобы единственное допустимое значение для Person's
Gender
равно Unknown
, а также Male
для Man
и Female
для Woman
.
Я пробовал следующее, но, конечно, оно не компилируется:
package Persons is
type Genders is (Male, Female, Unknown);
type Person is private;
type Man is private;
type Woman is private;
function Get_Age (Self : Person) return Integer;
function Get_Name (Self : Person) return String;
function Get_Weight (Self : Person) return Float;
function Get_Height (Self : Person) return Float;
function Get_gender (Self : Person) return Genders;
private
type Person is
record
Age : Integer := 0;
Name : String (1..256) := (others => Character'Val(0)); -- '
Height, Weight : Float := 0.0;
Gender : Genders := Unknown;
end record;
type Man is new Person with Gender => Male;
type Woman is new Person with Gender => Female;
end Persons;
Я не хочу объявлять Person
как параметрический тип, потому что, таким образом, Person
будет разрешено быть Male
, Female
или Unknown
, и я не хочу этого делать.
Можно ли делать то, что я хочу делать?