Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Otvety_po_yazikam.docx
Скачиваний:
10
Добавлен:
29.03.2015
Размер:
97.74 Кб
Скачать

Вопрос №32 Свойства как механизм доступа к данным

Контроль доступа 

Каждое поле, метод или свойство класса имеет атрибут, называемый видимостью. В Pascal существуют три типа атрибутов видимости: public (открытый), private (закрытый) и protected (защищенный). К члену класса, имеющему атрибут public, можно обратиться из любого места программы, члены класса с атрибутом private доступны только внутри методов этого класса, члены класса с атрибутом protected доступны внутри методов этого класса и всех его подклассов. Атрибуты видимости могут находиться внутри класса, при этом все дальнейшие члены приобретают этот атрибут. Например:

type   A=class   private     x: integer;   protected     a: integer;   public     constructor Create(xx: integer);     begin       x:=xx; // верно, т.к. мы внутри метода класса, которому принадлежит закрытое поле x       a:=0; // верно     end;     procedure print;   end;   B=class(A)     procedure print;     begin       writeln(a); // верно, т.к. a - защищенное поле       writeln(x); // неверно, т.к. х - закрытое поле     end;   end; ... var a1: A; ... writeln(a1.x); // неверно, т.к. х - закрытое поле writeln(a1.a); // неверно, т.к. a - защищенное поле a1.print; // верно, т.к. print - открытый метод

Вопрос №33 Наследование. Примеры реализации принципа наследования

Наследование позволяет изменить или дополнить поведение уже существующего класса, нет никакой необходимости переписывать класс заново. Вы должны объявить, что новый класс является потомком уже существующего и добавить в новый класс свойства и методы, которые Вам необходимы или перекрыть существующие методы и свойства.( Наследование — это свойство системы, позволяющее описать новый класс на основе уже существующего с частично или полностью заимствующейся функциональностью. Класс, от которого производится наследование, называется базовым, родительским или суперклассом. Новый класс — потомком, наследником или производным классом.)

Type TmyFirstClass = class(TObject) Private Protected Public Constructor Create(Val: Integer); virtual; end;

TmySecondClass = class(TMyFirstClass) Private AmyField: string; // Добавили новое поле Protected Procedure SetMyField(Val: string); // Добавили процедуру Public Constructor Create(Val: Integer); override; // Перегрузили конструктор Property MyField: string read AmyField write SetMyField; // Добавили свойство End.

Вопрос №34 Полиморфизм. Примеры реализации

Указателю на экземпляр объектного типа может быть присвоен адрес любого экземпляра любого из дочерних типов. При обращении к свойствам и методам через этот указатель будет доступен именно экземпляр, адрес которого был присвоен, а не предок. Это и есть полиморфизм. Т.е. Вы можете иметь доступ к потомку через указатель объектного типа предка.( Полиморфизм — это свойство системы использовать объекты с одинаковым интерфейсом без информации о типе и внутренней структуре объекта.)

Type

TMyClass = class(TObject) … public procedure GetData: string; virtual; abstract; … end;

TmySun1Class = class(TMyClass) Protected AmyField: string; … public procedure GetData: string; override; … end;

TmySun2Class = class(TMyClass) Protected AmyField: Integer; … public procedure GetData: string; override; … end; … implementation

procedure TmySun1Class.GetData: string; begin Result:= AmyField; end;

procedure TmySun2Class.GetData: string; begin Result:=IntToStr(AmyField); end; …

Var MyClass: TmyClass; Class1: TmySun1Class; Class2: TmySun2Class; Begin Class1:=TmySun1Class.Create; Class2:=TmySun2Class.Create; … MyClass:= Class1; Label1.Caption:= MyClass.GetData; MyClass:= Class2; Label2.Caption:= MyClass.GetData; end;

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]