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

17 Вопрос

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

При применении свойств

  • можно задать значение по умолчанию, которое будет хранится в данном свойстве (или указать, что никакого значения по умолчанию не предполагается);

  • можно указать, что это свойство только для чтения.

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

Свойства повышают гибкость и безопасность программирования, поскольку, являясь частью (открытого) интерфейса, позволяют менять внутреннюю реализацию объекта без изменения его свойств. По своей сути, свойства предназначены для того, чтобы свести программирование к операциям над свойствами, скрывая вызовы методов.

Содержание

  • 1 Методы свойств

  • 2 Примеры

    • 2.1 Свойства в C#

    • 2.2 Свойства в Delphi

    • 2.3 Свойства в ActionScript

    • 2.4 Свойства в Objective C

    • 2.5 Свойства в Ruby

  • 3 См. также

Методы свойств

Во многих языках программирования свойства реализуются в виде пары методов: метод, получающий текущее значение свойства, называется акцессор (accessor); метод, задающий новое значение свойства — мутатор (mutator). В языках программирования, не поддерживающих свойства, например C++ и Java, пара из акцессора и мутатора является общепринятым суррогатом для их замены.

Принято называть методы свойств именем свойства с приставками get и set: например, для свойства Xyzzy — get_Xyzzy и set_Xyzzy (традиционный стиль Си) либо GetXyzzy и SetXyzzy (стиль CamelCase). В связи с этой схемой наименования за методами свойств закрепились жаргонные названия getter и setter.

Примеры

Свойства в C#

Свойства в C# — поля с логическим блоком, в котором есть ключевые слова get и set.

Пример класса со свойством:

class MyClass

{

private int p_field;

public int Field

{

get

{

return p_field;

}

private set

{

p_field = value;

}

}

}

Свойства в Delphi

Для описания свойства в Delphi служит слово property.

Пример класса со свойством:

TMyClass = class

private

FMyField: Integer;

procedure SetMyField(const Value: Integer);

function GetMyField: Integer;

public

property MyField: Integer read GetMyField write SetMyField;

end;

function TMyClass.GetMyField: Integer;

begin

Result := FMyField;

end;

procedure TMyClass.SetMyField(const Value: Integer);

begin

FMyField := Value;

end;

[править] Свойства в ActionScript

class MyClass

{

private _foo : int;

public function get foo () : int {

return _foo;

}

public function set foo (foo : int) : void {

_foo = foo;

}

}

Свойства в Objective C

@interface Company : NSObject

{

NSString *name;

}

@property(retain) NSString *name;

@end

@implementation Company

@synthesize name;

@end

Свойства в Ruby

Описания свойства в Ruby ничем не отличается от описания метода. Например, для создания свойства duration у класса Song нужно описать методы duration и duration=(value)

class Song

def duration

@duration

end

def duration=(value)

@duration = value

end

end

Однако простое обращение к внутренней переменной объекта может быть заменено на вызов метода attr_accessor :duration

class Song

attr_accessor :duration

end

Более интересным будет пример создания свойства duration_in_minutes, которое будет возвращать или устанавливать время длительности в минутах:

class Song

def duration_in_minutes

@duration/60.0

end

def duration_in_minutes=(value)

@duration = (value*60).to_i

end

end

При этом изменение свойства duration_in_minutes повлияет на свойство duration. Например

song = Song.new

song.duration_in_minutes = 1.2

print song.duration # напечатает 72