ООП: атрибуты и методы
Объектно-ориентированное программирование: на пальцах Что такое классы в объектно-ориентированном программировании Объясняем объекты Сравнение: классы против функций
ООП: атрибуты и методы

Про­дол­жа­ем цикл ста­тей об осно­вах объектно-ориентированного про­грам­ми­ро­ва­ния. Сего­дня гово­рим о двух важ­ных сло­вах в ООП: атри­бу­тах и мето­дах. Это осно­ва лек­си­ко­на ООП, поэто­му нуж­но знать.

Крат­кое содер­жа­ние преды­ду­щих частей:

  • ООП — это под­ход к про­грам­ми­ро­ва­нию, осно­ван­ный на поня­тии объ­ек­тов и классов.
  • Объ­ект мож­но пред­ста­вить как некую «короб­ку», в кото­рой лежат какие-то дан­ные и кото­рая уме­ет совер­шать какие-то дей­ствия. Без объ­ек­тов всё это лежит про­сто «в про­грам­ме», а бла­го­да­ря объ­ек­там оно раз­ло­же­но по понят­ным управ­ля­е­мым «короб­кам».
  • Мож­но иметь типо­вые объ­ек­ты, то есть име­ю­щие похо­жую струк­ту­ру и содер­жа­ние — как про­из­во­дить това­ры на кон­вей­е­ре. Чер­тёж, по кото­ро­му дела­ют такие объ­ек­ты, назы­ва­ет­ся клас­сом. Напри­мер, в про­грам­ме может быть класс «поль­зо­ва­тель», по кото­ро­му созда­ют­ся все буду­щие поль­зо­ва­те­ли. Или класс «товар», по кото­ро­му созда­ют­ся все буду­щие товары.
  • Всё это нуж­но, что­бы упо­ря­до­чить рабо­ту слож­ных боль­ших программ.

Теперь ныр­нём в атри­бу­ты и методы.

Атрибуты

Атри­бут — это пере­мен­ная, свя­зан­ная с объ­ек­том или клас­сом. Гру­бо гово­ря, если я хочу, что­бы у объ­ек­та «Поль­зо­ва­тель» появи­лась фами­лия, я дол­жен сде­лать поль­зо­ва­те­лю атри­бут «Фами­лия».

Для про­грам­ми­стов: у клас­са есть атри­бу­ты, свой­ства и поля. В зави­си­мо­сти от язы­ка про­грам­ми­ро­ва­ния эти три пара­мет­ра могут озна­чать одно и то же, а могут раз­ли­чать­ся. В этой ста­тье мы раз­би­ра­ем ака­де­ми­че­ский под­ход к струк­ту­ре клас­са вида «атри­бут — значение».

Возь­мём в каче­стве при­ме­ра мета­фо­ру — про­из­вод­ство теле­фо­нов. У нас есть класс «Смарт­фон» — некий абстракт­ный смарт­фон, по лека­лам кото­ро­го изго­тав­ли­ва­ют кон­крет­ные объекты-смартфоны.

У клас­са «Смарт­фон» могут быть такие атрибуты:

  • зад­няя камера
  • перед­няя камера
  • дат­чи­ки объёма
  • бата­рей­ка
  • память

Это у нас будут атри­бу­ты клас­са «Смарт­фон». Они могут при­ни­мать кон­крет­ные зна­че­ния: каме­ры могут быть раз­ных моде­лей, память может быть 64 или 256 гига­байт, а бата­рей­ка — 2500 мАч или 3500 мАч.

Когда мы зада­ём атри­бут для клас­са, мы как буд­то настра­и­ва­ем про­из­вод­ствен­ную линию: «Тут у нас будет ста­нок по уста­нов­ке камер, там — по вкле­и­ва­нию бата­реи». Когда мы зада­ли класс с опре­де­лён­ны­ми атри­бу­та­ми, все объ­ек­ты, про­из­ве­дён­ные из это­го клас­са, будут появ­лять­ся на свет с эти­ми атрибутами.

Методы

Мето­ды — это то, как мож­но вза­и­мо­дей­ство­вать с атри­бу­та­ми, узна­вать и менять их зна­че­ния. Рас­смот­рим их на том же про­шлом при­ме­ре про класс мобиль­ни­ка. Вот какие дей­ствия мож­но совершать:

  • позво­нить;
  • сде­лать фото;
  • обра­бо­тать HDR-фото, что­бы было кра­си­во, когда сни­ма­ешь про­тив солнца;
  • запи­сать заметки;
  • уста­но­вить программу;
  • посмот­реть погоду;
  • поли­стать фотки;
  • пой­мать сиг­нал сото­вой сети.

Полу­ча­ет­ся, что мето­ды отве­ча­ют за то, что­бы мож­но было вза­и­мо­дей­ство­вать с клас­сом. Чаще все­го они отве­ча­ют за то, что мож­но сде­лать с атрибутами

Если посмот­реть на спи­сок, мож­но заме­тить, что почти все мето­ды доступ­ны для выпол­не­ния извне — позво­нить, сде­лать фото, посмот­реть пого­ду и так далее. Это зна­чит, что это откры­тые мето­ды (public) — их может вызы­вать и рабо­тать с ними кто угод­но: как поль­зо­ва­тель, так и дру­гие про­грам­мы для сво­их нужд.

Но два дру­гих мето­да из спис­ка — осо­бен­ные: обра­бо­тать HDR-фото и пой­мать сиг­нал сети. Их нель­зя запу­стить напря­мую, их вызы­ва­ет опе­ра­ци­он­ная систе­ма, когда ей это нуж­но. Это зна­чит, что это закры­тые (private) мето­ды, и они доступ­ны толь­ко внут­ри само­го клас­са. Если клас­су пона­до­бит­ся что-то обра­бо­тать внут­ри себя, он ими вос­поль­зу­ет­ся, а дру­гие не смо­гут это­го сделать.

Ещё есть защи­щён­ные (protected) мето­ды. Их пока нет в наших при­ме­рах, но мы до них обя­за­тель­но дойдём.