Свойство (программирование)

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

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

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

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

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

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

Во многих языках программирования свойства реализуются в виде пары методов: метод, получающий текущее значение свойства, называется акцессор (accessor); метод, задающий новое значение свойства, — мутатор (mutator).[источник не указан 3173 дня] В языках программирования, не поддерживающих свойства, например, 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;
        }
    }
}

Свойства в VB.NET

Пример реализации в VB.NET. Если нужно реализовать свойство только для чтения или только для записи, применяются модификаторы ReadOnly и WriteOnly. Свойство может быть параметризованным. Также может быть свойством по умолчанию, для этого необходимо добавить модификатор Default

Sub Main
    Dim F As New Foo

    F.Data = 5
    F.Item(0) = 5
    F(0) = 5                'Запись в свойство
    Console.WriteLine(F(0)) 'Чтение свойства
End Sub

Public Class Foo
    Private m_Data As Integer
    Private m_Arr() As Integer = {1, 2, 3, 4, 5}

    Public Property Data As Integer
        Set(Value As Integer) 'Сеттер
            m_Data = Value
        End Set
        Get
            Return m_Data 'Геттер
        End Get
    End Property

    Public Default Property Item(Param As Integer) As Integer 'Параметризованное свойство по умолчанию
        Set(Value As Integer)
            m_Arr(Param) = Value
        End Set
        Get
            Return m_Arr(Param)
        End Get
    End Property
End Class

Свойства в 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 *var_name;
}

@property(retain) NSString *var_name;

@end

@implementation Company

@synthesize var_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

Свойства в Python

Набор методов с декораторами определяет способы работы со свойством (чтение, запись, удаление). Если какой-то из методов убрать (за исключением @property), теряется возможность работать со свойством соответствующим образом.

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

class A:
    def __init__(self):
        self.__x = None
    
    @property
    def x(self):
        return self.__x
    
    @x.setter
    def x(self, value):
        self.__x = value
    
    @x.deleter
    def x(self):
        self.__x = None
>>> a = A()
>>> a.x
>>> a.x = 2
>>> a.x
2
>>> del a.x
>>> a.x
>>>

Свойства в PHP

Язык PHP предоставляет так называемые «магические» методы, которые перехватывают вызовы и позволяют реализовать свойства.

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

class A
{
    private int $value = 0;
    
    public function __get(string $name): int
    {
        if ($name !== 'value') {
            throw new Exception('Property $' . $name . ' not found');
        }

        return $this->value;
    }
    
    public function __set(string $name, mixed $value): void
    {
        if ($name !== 'value') {
            throw new Exception('Property $' . $name . ' not found');
        }

        $this->value = $value + 10;
    }
    
    public function __isset(string $name): bool
    {
        return $name === 'value';
    }

    public function __unset(string $name): void
    {
        throw new Exception('Can not remove property $' . $name);
    }
}
$object = new A();

$object->value = 32;
echo $object->value; // int(42)

unset($object->value); // Error: Can not remove property $value

См. также

Read other articles:

Вопросы ономастикиангл. Problems of Onomastics Специализация научный (лингвистика) Периодичность два раза в год Язык русский Адрес редакции 620000, Екатеринбург, пр. Ленина, 51, ком. 306 Главный редактор Е. Л. Березович Страна  Россия Издатель Издательство Уральского университета И�...

 

 

SobbleTokoh PokémonKarya seni oleh Ken SugimoriPermainanperdanaPokémon Sword dan Shield (2019)Pengisi suara Bahasa Inggris Erica Schroeder Bahasa Jepang Sayaka Senbongi InformasiSpesiesPokémonTipeAir Sobble, yang dikenal di Jepang sebagai Messon (メッソンcode: ja is deprecated ), adalah spesies Pokémon dalam waralaba media Pokémon milik Nintendo dan Game Freak. Pertama kali diperkenalkan dalam Pokémon Sword dan Shield dan menjadi salah satu dari tiga Pokémon yang tersedia untuk pem...

 

 

У этого термина существуют и другие значения, см. Чуваши (значения). Чуваши Современное самоназвание чуваш. чӑвашсем чуваш. чӑваш Численность и ареал Всего: ~ 1,1 млн (2023); ~ 1,5 млн (2010)  Россия:  1 067 139 (перепись 2021)[1],  1 435 872 (2010)[2],  Чувашия:  814 750 (20...

Team 18ManufacturerChevroletTeam PrincipalAdrian BurgessRace Drivers18. Mark Winterbottom 20. David ReynoldsRace Engineers18. Manuel Sanchez 20. TBAChassisCamaro ZL1Debut2013Drivers' Championships0Round wins0Race wins1Pole positions12020 position6th (3122 pts) Team 18 (formerly known as Charlie Schwerkolt Racing) is an Australian motor racing team[1] currently competing in the Supercars Championship, running two Chevrolet Camaro ZL1s. The team's current drivers are Mark Winterbottom ...

 

 

HOXD3 المعرفات الأسماء المستعارة HOXD3, HOX1D, HOX4, HOX4A, Hox-4.1, homeobox D3 معرفات خارجية الوراثة المندلية البشرية عبر الإنترنت 142980 MGI: MGI:96207 HomoloGene: 5034 GeneCards: 3232 علم الوجود الجيني الوظيفة الجزيئية • ‏GO:0001131، ‏GO:0001151، ‏GO:0001130، ‏GO:0001204 DNA-binding transcription factor activity• sequence-specific DNA binding• ربط دي إن إي• ‏GO...

 

 

土库曼斯坦总统土库曼斯坦国徽土库曼斯坦总统旗現任谢尔达尔·别尔德穆哈梅多夫自2022年3月19日官邸阿什哈巴德总统府(Oguzkhan Presidential Palace)機關所在地阿什哈巴德任命者直接选举任期7年,可连选连任首任萨帕尔穆拉特·尼亚佐夫设立1991年10月27日 土库曼斯坦土库曼斯坦政府与政治 国家政府 土库曼斯坦宪法 国旗 国徽 国歌 立法機關(英语:National Council of Turkmenistan) ...

Questa voce sugli argomenti chiese della provincia di Mantova e Mantova è solo un abbozzo. Contribuisci a migliorarla secondo le convenzioni di Wikipedia. Chiesa di Santa PaolaStato Italia RegioneLombardia LocalitàMantova IndirizzoPiazza Romolo Quazza Coordinate45°08′59.01″N 10°47′49.43″E / 45.149724°N 10.797065°E45.149724; 10.797065Coordinate: 45°08′59.01″N 10°47′49.43″E / 45.149724°N 10.797065°E45.149724; 10.797065 Religio...

 

 

English rock band This article is about the English rock band. For other uses, see Cardiac arrest (disambiguation). CardiacsCardiacs live at Reading Rock Festival 1986Background informationAlso known asCardiac Arrest[a]OriginKingston upon Thames, EnglandGenres Post-punk pop psychedelia art rock[1][2] DiscographyCardiacs discographyYears active1977–2008[b]2024LabelsTortchAlphabet Business ConcernTorsoStrange FruitOrgSpinoffsThe TrudyThe Sea NymphsSpratleys Jap...

 

 

This article does not cite any sources. Please help improve this article by adding citations to reliable sources. Unsourced material may be challenged and removed.Find sources: Reuss-Ebersdorf – news · newspapers · books · scholar · JSTOR (May 2022) (Learn how and when to remove this message) County (Principality) of Reuss-EbersdorfGrafschaft (Fürstentum) Reuß-Ebersdorf1678–1824 Flag Coat of arms The Reuss Junior Line within ThuringiaStatusState of...

Senior chaplain of the US Air Force This article relies largely or entirely on a single source. Relevant discussion may be found on the talk page. Please help improve this article by introducing citations to additional sources.Find sources: Chief of Chaplains of the United States Air Force – news · newspapers · books · scholar · JSTOR (January 2024) Chief of Chaplains of theUnited States Air ForceFlag of an Air Force major generalIncumbentMajor General...

 

 

Pecuk Brandt Urile penicillatus Status konservasiRisiko rendahIUCN22696753 TaksonomiKerajaanAnimaliaFilumChordataKelasAvesOrdoSuliformesFamiliPhalacrocoracidaeGenusUrileSpesiesUrile penicillatus Tata namaSinonim taksonPhalacrocorax penicillatusProtonimCarbo penicillatus lbs Pecuk (Kormoran) Brandt, atau Urile penicillatus, adalah spesies burung laut yang berasal dari famili burung laut pecuk yang hidup di pesisir Pasifik Amerika Utara. Jangkauan burung adalah dari Alaska hingga Teluk Californ...

 

 

José Toribio Medina, el autor de la colección. La Colección de documentos inéditos para la historia de Chile, desde el viaje de Magallanes hasta la Batalla de Maipú (1518-1818) colectados y publicados por J. T. Medina es una colección de 30 volúmenes que integra una serie de documentos históricos hasta el momento inéditos para el estudio de la historia de Chile, recolectados por José Toribio Medina. La colección se publicó entre 1888 y 1902, y comprendían 105 documentos que corre...

Cet article est une ébauche concernant le Japon et une entreprise. Vous pouvez partager vos connaissances en l’améliorant (comment ?) selon les recommandations des projets correspondants. Si ce bandeau n'est plus pertinent, retirez-le. Cliquez ici pour en savoir plus. Cet article ne cite pas suffisamment ses sources (octobre 2019). Si vous disposez d'ouvrages ou d'articles de référence ou si vous connaissez des sites web de qualité traitant du thème abordé ici, merci de complé...

 

 

БМП-1 БМП-1 обр. 1965 года (Объект 765) Классификация боевая машина пехоты Боевая масса, т 13,0 Компоновочная схема моторно-трансмиссионное отделение спереди, боевое посередине, десантное сзади Экипаж, чел. 3 Десант, чел. 8 История Разработчик ГСКБ-2 ПАО Курганмаш ЧТЗ Производител�...

 

 

Book by Paulo Freire Pedagogy of the Oppressed Spanish edition, 1968AuthorPaulo FreireOriginal titlePedagogia do OprimidoTranslatorMyra RamosLanguagePortugueseSubjectPedagogyPublication date1968Publication placeBrazilISBN978-0-8264-1276-8Dewey Decimal370.115LC ClassLB880 .F73 Critical pedagogy Major works Pedagogy of the Oppressed Critical Pedagogy Primer Learning to Labour Schooling and the Struggle for Public Life Theorists Paulo Freire Henry Giroux Peter McLaren bell hooks Antoni...

CA10 معرفات أسماء بديلة CA10, CA-RPX, CARPX, HUCEP-15, carbonic anhydrase 10 معرفات خارجية الوراثة المندلية البشرية عبر الإنترنت 604642 MGI: MGI:1919855 HomoloGene: 23201 GeneCards: 56934 علم الوجود الجيني وظائف جزيئية • وظيفة جزيئة• carbonate dehydratase activity• ربط أيون الزنك• أنهيدراز كربوني مكونات خلوية • مكون خلوي عمليات حيوي...

 

 

Airline of the United States ExcelAire IATA ICAO Call sign — XLS[1] EXCELAIRE Founded1985AOC #EW7A331NOperating basesLong Island MacArthur AirportFleet size7Parent companyHawthorne CompanyHeadquarters2221 Smithtown Ave, Ronkonkoma, NY 11779 [2]Key peopleWilliam E. Harton, Bob Sherry, Tom Robbins, Chris Zarzano, John Reese, Christopher Curtin, And Chuck Kegley [3]Websitehttp://www.excelaire.com ExcelAire, LLC is a United States air charter company based at Long I...

 

 

English designer William Arthur Smith BensonW.A.S. Benson by Frederick Hollyer, c. 1900.Born(1854-10-17)17 October 1854Died5 July 1924(1924-07-05) (aged 69)NationalityBritishOccupationDesignerSpouse(s)Venetia Benson, née HuntRelativesAlfred William Hunt (father-in-law)Margaret Raine Hunt (mother-in-law)Violet Hunt (sister-in-law) George Heywood Maoinoir Sumner (brother-in-law) William Arthur Smith Benson (also known as W.A.S. Benson) (17 October 1854 – 5 July 1924) was a British desig...

ひろがわちょう 広川町 稲むらの火の館町庁舎位置 広川町旗 広川町章 国 日本地方 近畿地方都道府県 和歌山県郡 有田郡市町村コード 30362-3法人番号 7000020303623 面積 65.35km2総人口 6,348人 [編集](推計人口、2024年9月1日)人口密度 97.1人/km2隣接自治体 有田郡湯浅町、有田川町、日高郡由良町、日高町、日高川町町の木 アラカシ町の花 ササユリ広川町役場町長 [編集]西...

 

 

City in Kharkiv Oblast, Ukraine Kharkov redirects here. For other uses, see Kharkiv (disambiguation) and Kharkov (disambiguation). City in Kharkiv Oblast, UkraineKharkiv ХарківCityUkrainian transcription(s) • National, ALA-LC, BGN/PCGNKharkiv • ScholarlyCharkivClockwise from top: Assumption Cathedral, Kharkiv railway station, National University of Kharkiv, Kharkiv city council FlagCoat of armsBrandmarkNickname: Smart CityInteractive map of KharkivKhark...