Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° JavaΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 32

Автор Н.А. Вязовик

* Ссли ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ для чтСния ΠΈ измСнСния значСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Ρ‚ΠΎ ΠΈΡ… ΠΈΠΌΠ΅Π½Π° Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ΡΡ, соотвСтствСнно, с get ΠΈ set, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, для ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ size это Π±ΡƒΠ΄ΡƒΡ‚ getSize() ΠΈ setSize() ;

* ΠΌΠ΅Ρ‚ΠΎΠ΄, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΠΉ Π΄Π»ΠΈΠ½Ρƒ, называСтся length(), Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² классС String ;

* имя ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ провСряСт булСвскоС условиС, начинаСтся с is, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, isVisible() Ρƒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° графичСского ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ интСрфСйса;

* ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Ρƒ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ F, называСтся toF(), Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΌΠ΅Ρ‚ΠΎΠ΄ toString(), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ любой ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΊ строкС.

Π’ΠΎΠΎΠ±Ρ‰Π΅, рСкомСндуСтся Π²Π΅Π·Π΄Π΅, Π³Π΄Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π½Π°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΏΠΎΡ…ΠΎΠΆΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΊΠ°ΠΊ Π² стандартных классах Java, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ΠΈ Π±Ρ‹Π»ΠΈ понятны всСм Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ.

Поля класса ΠΈΠΌΠ΅ΡŽΡ‚ ΠΈΠΌΠ΅Π½Π°, записываСмыС Π² Ρ‚ΠΎΠΌ ΠΆΠ΅ стилС, Ρ‡Ρ‚ΠΎ ΠΈ для ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ΡΡ с малСнькой Π±ΡƒΠΊΠ²Ρ‹, ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΡΡ‚ΠΎΡΡ‚ΡŒ ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… слов, ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ слово начинаСтся с Π·Π°Π³Π»Π°Π²Π½ΠΎΠΉ Π±ΡƒΠΊΠ²Ρ‹. ИмСна Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠΎΠ»Π΅ name Π² классС Human, ΠΈΠ»ΠΈ size Π² классС Planet.

Как для ΠΏΠΎΠ»Π΅ΠΉ Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° "Π·Π°ΡΠ»ΠΎΠ½ΡΡŽΡ‰Π΅Π³ΠΎ" объявлСния (obscuring), ΡƒΠΆΠ΅ ΠΎΠ±ΡΡƒΠΆΠ΄Π°Π»ΠΎΡΡŒ.

Поля ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ константами, Ссли Π² ΠΈΡ… объявлСнии стоит ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово final. Π˜Ρ… ΠΈΠΌΠ΅Π½Π° состоят ΠΈΠ· ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ слов, сокращСний, Π°Π±Π±Ρ€Π΅Π²ΠΈΠ°Ρ‚ΡƒΡ€. Π—Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ ΠΎΠ½ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ большими Π±ΡƒΠΊΠ²Π°ΠΌΠΈ, слова Ρ€Π°Π·Π΄Π΅Π»ΡΡŽΡ‚ΡΡ Π·Π½Π°ΠΊΠ°ΠΌΠΈ подчСркивания:


PI

MIN_VALUE

MAX_VALUE


Иногда константы ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‚ Π³Ρ€ΡƒΠΏΠΏΡƒ, Ρ‚ΠΎΠ³Π΄Π° рСкомСндуСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎ ΠΈΠ»ΠΈ нСсколько ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Ρ… слов Π² Π½Π°Ρ‡Π°Π»Π΅ ΠΈΠΌΠ΅Π½:


COLOR_RED

COLOR_GREEN

COLOR_BLUE


НаконСц, рассмотрим ΠΈΠΌΠ΅Π½Π° Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², конструкторов ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² ошибок. Они, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, довольно ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠ΅, Π½ΠΎ, Ρ‚Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ осмыслСны. НапримСр, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π°Π±Π±Ρ€Π΅Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρƒ (имя cp для ссылки Π½Π° экзСмпляр класса ColorPoint ) ΠΈΠ»ΠΈ сокращСниС ( buf для buffer ).

РаспространСнныС ΠΎΠ΄Π½ΠΎΠ±ΡƒΠΊΠ²Π΅Π½Π½Ρ‹Π΅ сокращСния:


byte b;

char c;

int i,j,k;

long l;

float f;

double d;

Object o;

String s;

Exception e;

// ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ

// ΠΎΡˆΠΈΠ±ΠΊΡƒ Π² Java


Π”Π²ΡƒΡ…- ΠΈ Ρ‚Ρ€Π΅Ρ…Π±ΡƒΠΊΠ²Π΅Π½Π½Ρ‹Π΅ ΠΈΠΌΠ΅Π½Π° Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠΎΠ²ΠΏΠ°Π΄Π°Ρ‚ΡŒ с принятыми Π΄ΠΎΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ уровня Internet-сайтов.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Π’ этой Π³Π»Π°Π²Π΅ Π±Ρ‹Π» рассмотрСн ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ имСнования элСмСнтов языка. Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ части большой систСмы Π½Π΅ зависСли Π΄Ρ€ΡƒΠ³ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π°, вводится понятиС " ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости ΠΈΠΌΠ΅Π½ΠΈ", Π²Π½Π΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ простоС, Π° составноС имя. Π—Π°Ρ‚Π΅ΠΌ Π±Ρ‹Π»ΠΈ ΠΈΠ·ΡƒΡ‡Π΅Π½Ρ‹ элСмСнты (members), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Ρƒ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² ΠΈ ссылочных Ρ‚ΠΈΠΏΠΎΠ². Π’Π°ΠΊΠΆΠ΅ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Π»Π°ΡΡŒ связь Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ² "ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€" (ΠΈΠ· Ρ‚Π΅ΠΌΡ‹ "ЛСксика") ΠΈ имя.

Π—Π°Ρ‚Π΅ΠΌ Π±Ρ‹Π»ΠΈ рассмотрСны ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² Java для создания физичСской ΠΈ логичСской структуры классов, Π° Ρ‚Π°ΠΊΠΆΠ΅ для Π±ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ разграничСния области видимости. ΠŸΠ°ΠΊΠ΅Ρ‚ содСрТит Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ ΠΈ Ρ‚ΠΈΠΏΡ‹ (классы ΠΈ интСрфСйсы). Вопрос ΠΎ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ΅ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² ΠΏΡ€ΠΈΠ²Π΅Π» ΠΊ Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Π½ΠΈΡŽ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ компиляции ΠΊΠ°ΠΊ тСкстовых Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΈΠΌΠ΅Π½Π½ΠΎ Π² Π²ΠΈΠ΄Π΅ Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ², ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, хранятся ΠΈ Ρ€Π°ΡΠΏΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡŽΡ‚ΡΡ Java-прилоТСния. Π’ΠΎΠ³Π΄Π° ΠΆΠ΅ Π²ΠΏΠ΅Ρ€Π²Ρ‹Π΅ Π±Ρ‹Π» рассмотрСн вопрос разграничСния доступа, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ доступ ΠΊ модулям компиляции опрСдСляСтся ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ, Π° Ρ‚ΠΎΡ‡Π½Π΅Π΅ – ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмой.

ΠœΠΎΠ΄ΡƒΠ»ΡŒ компиляции состоит ΠΈΠ· Ρ‚Ρ€Π΅Ρ… основных частСй – объявлСниС ΠΏΠ°ΠΊΠ΅Ρ‚Π°, ΠΈΠΌΠΏΠΎΡ€Ρ‚-выраТСния ΠΈ объявлСния Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ уровня. Π’Π°ΠΆΠ½ΡƒΡŽ Ρ€ΠΎΠ»ΡŒ ΠΈΠ³Ρ€Π°Π΅Ρ‚ бСзымянный ΠΏΠ°ΠΊΠ΅Ρ‚, ΠΈΠ»ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, хотя ΠΎΠ½ ΠΈ Π½Π΅ рСкомСндуСтся для примСнСния ΠΏΡ€ΠΈ создании Π±ΠΎΠ»ΡŒΡˆΠΈΡ… систСм. Π‘Ρ‹Π»ΠΈ ΠΈΠ·ΡƒΡ‡Π΅Π½Ρ‹ Π΄Π΅Ρ‚Π°Π»ΠΈ примСнСния Π΄Π²ΡƒΡ… Π²ΠΈΠ΄ΠΎΠ² ΠΈΠΌΠΏΠΎΡ€Ρ‚-Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ – ΠΈΠΌΠΏΠΎΡ€Ρ‚ класса ΠΈ ΠΈΠΌΠΏΠΎΡ€Ρ‚ ΠΏΠ°ΠΊΠ΅Ρ‚Π°. НаконСц, Π±Ρ‹Π»ΠΎ Π½Π°Ρ‡Π°Ρ‚ΠΎ рассмотрСниС объявлСний Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ уровня (эта Ρ‚Π΅ΠΌΠ° Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½Π° Π² Π³Π»Π°Π²Π΅, ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰Π΅ΠΉ объявлСниС классов). ΠŸΠ°ΠΊΠ΅Ρ‚Ρ‹, ΠΊΠ°ΠΊ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ элСмСнты языка, ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ соглашСния ΠΏΠΎ имСнованию, ΠΏΡ€ΠΈΠ·Π²Π°Π½Π½Ρ‹Π΅ ΠΎΠ±Π»Π΅Π³Ρ‡ΠΈΡ‚ΡŒ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° ΠΈ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ возникновСния ошибок ΠΈ двусмыслСнных ситуаций Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅.

ОписаниС области видимости для Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… элСмСнтов языка ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ вопросу ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… пСрСкрытиях Ρ‚Π°ΠΊΠΈΡ… областСй ΠΈ, ΠΊΠ°ΠΊ слСдствиС, ΠΎ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Π°Ρ… ΠΈΠΌΠ΅Π½. Π Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‚ΡΡ "Π·Π°Ρ‚Π΅Π½ΡΡŽΡ‰ΠΈΠ΅" ΠΈ "Π·Π°ΡΠ»ΠΎΠ½ΡΡŽΡ‰ΠΈΠ΅" объявлСния. Для устранСния ΠΈΠ»ΠΈ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΡ возмоТности возникновСния Ρ‚Π°ΠΊΠΈΡ… ситуаций ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ соглашСния ΠΏΠΎ имСнованию для всСх элСмСнтов языка.


6. ЛСкция: ОбъявлСниС классов

Π¦Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½Π°Ρ Ρ‚Π΅ΠΌΠ° Π»Π΅ΠΊΡ†ΠΈΠΈ – объявлСниС классов, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ любоС Java-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ являСтся Π½Π°Π±ΠΎΡ€ΠΎΠΌ классов. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ рассматриваСмый вопрос – систСма разграничСния доступа Π² Java. ΠžΠΏΠΈΡΡ‹Π²Π°Π΅Ρ‚ΡΡ, Π·Π°Ρ‡Π΅ΠΌ Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½ΡƒΠΆΠ½ΠΎ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ доступом Π² ОО-языкС программирования ΠΈ ΠΊΠ°ΠΊ ΠΎΠ½ΠΎ осущСствляСтся Π² Java. Π—Π°Ρ‚Π΅ΠΌ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ рассматриваСтся структура объявлСния Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° класса ΠΈ Π΅Π³ΠΎ Ρ‚Π΅Π»Π°, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ состоит ΠΈΠ· элСмСнтов (ΠΏΠΎΠ»Π΅ΠΉ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²), конструкторов ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ². Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ описываСтся сигнатура ΠΌΠ΅Ρ‚ΠΎΠ΄Π° main, с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ начинаСтся Ρ€Π°Π±ΠΎΡ‚Π° Java-прилоТСния, ΠΏΡ€Π°Π²ΠΈΠ»Π° ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹.


Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

ОбъявлСниС классов являСтся Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½ΠΎΠΉ Ρ‚Π΅ΠΌΠΎΠΉ курса, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ любая ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π° Java – это Π½Π°Π±ΠΎΡ€ классов. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ρ‚ΠΈΠΏΡ‹ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠΉ конструкциСй языка, ΠΈΡ… структура довольно слоТна, ΠΈΠΌΠ΅Π΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎ тонкостСй. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ данная Ρ‚Π΅ΠΌΠ° Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π° Π½Π° Π΄Π²Π΅ Π»Π΅ΠΊΡ†ΠΈΠΈ.

Π­Ρ‚Π° лСкция начинаСтся с продолТСния Ρ‚Π΅ΠΌΡ‹ ΠΏΡ€ΠΎΡˆΠ»ΠΎΠΉ Π»Π΅ΠΊΡ†ΠΈΠΈ – ΠΈΠΌΠ΅Π½Π° ΠΈ доступ ΠΊ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ элСмСнтам языка. НСобходимо Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ разграничСния доступа Π² Java, ΠΊΠ°ΠΊ ΠΎΠ½ устроСн, для Ρ‡Π΅Π³ΠΎ примСняСтся. Π—Π°Ρ‚Π΅ΠΌ Π±ΡƒΠ΄ΡƒΡ‚ описаны ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ ΠΏΡ€Π°Π²ΠΈΠ»Π° объявлСния классов.

ЛСкция 8 ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ рассматриваСт особСнности ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ Java. Вводится понятиС интСрфСйса. Π£Ρ‚ΠΎΡ‡Π½ΡΡŽΡ‚ΡΡ ΠΏΡ€Π°Π²ΠΈΠ»Π° объявлСния классов ΠΈ описываСтся объявлСниС интСрфСйса.

ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ доступа

Π’ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… языках ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΏΡ€Π°Π²Π° доступа, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°ΡŽΡ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ использования, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π² классС. НапримСр, Π»Π΅Π³ΠΊΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π΄Π²Π° ΠΊΡ€Π°ΠΉΠ½ΠΈΡ… Π²ΠΈΠ΄Π° ΠΏΡ€Π°Π² доступа: это public, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»Π΅ доступно ΠΈΠ· любой Ρ‚ΠΎΡ‡ΠΊΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΈ private, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ‚ΠΎΠ³ΠΎ класса, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠ½ΠΎ объявлСно.

Однако ΠΏΡ€Π΅ΠΆΠ΄Π΅, Ρ‡Π΅ΠΌ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠΌΡƒ Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Π½ΠΈΡŽ этих ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ² доступа, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ, Π·Π°Ρ‡Π΅ΠΌ ΠΎΠ½ΠΈ Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½ΡƒΠΆΠ½Ρ‹.

ΠŸΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ² доступа

ΠžΡ‡Π΅Π½ΡŒ часто ΠΏΡ€Π°Π²Π° доступа Ρ€Π°ΡΡ†Π΅Π½ΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ Π½Π΅ΠΊΠΈΠΉ элСмСнт бСзопасности ΠΊΠΎΠ΄Π°: ΠΌΠΎΠ», Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°Ρ‰ΠΈΡ‰Π°Ρ‚ΡŒ классы ΠΎΡ‚ "Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ³ΠΎ" использования. НапримСр, Ссли Π² классС Human (Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ) Π΅ΡΡ‚ΡŒ ΠΏΠΎΠ»Π΅ age (возраст Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠ°), Ρ‚ΠΎ ΠΊΠ°ΠΊΠΎΠΉ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ программист Π½Π°ΠΌΠ΅Ρ€Π΅Π½Π½ΠΎ ΠΈΠ»ΠΈ ΠΏΠΎ нСзнанию ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ этому полю ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, послС Ρ‡Π΅Π³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ станСт Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ, ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΡΠ²ΠΈΡ‚ΡŒΡΡ ошибки. Для Π·Π°Ρ‰ΠΈΡ‚Ρ‹ Ρ‚Π°ΠΊΠΎΠ³ΠΎ поля age Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ Π΅Π³ΠΎ private.

Π­Ρ‚ΠΎ довольно распространСнная Ρ‚ΠΎΡ‡ΠΊΠ° зрСния, ΠΎΠ΄Π½Π°ΠΊΠΎ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠ·Π½Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° Π΄Π°Π»Π΅ΠΊΠ° ΠΎΡ‚ истины. ΠžΡΠ½ΠΎΠ²Π½Ρ‹ΠΌ смыслом разграничСния ΠΏΡ€Π°Π² доступа являСтся обСспСчСниС Π½Π΅ΠΎΡ‚ΡŠΠ΅ΠΌΠ»Π΅ΠΌΠΎΠ³ΠΎ свойства ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ – инкапсуляции, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ сокрытия Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. Π˜ΡΠΏΡ€Π°Π²ΠΈΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ ΠΎΡ‚Ρ€Π°ΠΆΠ°Π» ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ² доступа. Π˜Ρ‚Π°ΠΊ, ΠΏΡƒΡΡ‚ΡŒ Π² классС Human Π΅ΡΡ‚ΡŒ ΠΏΠΎΠ»Π΅ age цСлочислСнного Ρ‚ΠΈΠΏΠ°, ΠΈ Ρ‡Ρ‚ΠΎΠ±Ρ‹ всС ΠΆΠ΅Π»Π°ΡŽΡ‰ΠΈΠ΅ ΠΌΠΎΠ³Π»ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ этим ΠΏΠΎΠ»Π΅ΠΌ, ΠΎΠ½ΠΎ ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ΡΡ public.


public class Human {

public int age;

}


ΠŸΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ врСмя, ΠΈ Ссли Π² Π³Ρ€ΡƒΠΏΠΏΡƒ программистов, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΡ… Π½Π°Π΄ систСмой, входят дСсятки Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ², Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ всС, ΠΈΠ»ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΠ΅, ΠΈΠ· Π½ΠΈΡ… Π½Π°Ρ‡Π½ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ это ΠΏΠΎΠ»Π΅.

ΠœΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ цСлочислСнного Ρ‚ΠΈΠΏΠ° Π΄Π°Π½Π½Ρ‹Ρ… Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠΆΠ΅ нСдостаточно ΠΈ захочСтся ΡΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ‚ΠΈΠΏ поля Π½Π° Π΄Ρ€ΠΎΠ±Π½Ρ‹ΠΉ. Однако Ссли просто ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ int Π½Π° double, вскорС всС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ пользовались классом Human ΠΈ Π΅Π³ΠΎ ΠΏΠΎΠ»Π΅ΠΌ age, ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ°Ρ‚, Ρ‡Ρ‚ΠΎ Π² ΠΈΡ… ΠΊΠΎΠ΄Π΅ появились ошибки, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ»Π΅ Π²Π΄Ρ€ΡƒΠ³ стало Π΄Ρ€ΠΎΠ±Π½Ρ‹ΠΌ, ΠΈ Π² строках, ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… этим:


Human h = getHuman();

// ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ссылку

int i=h.age;

// ошибка!!


Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Ρ‚ΡŒ ошибка ΠΈΠ·-Π·Π° ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠΈ провСсти нСявным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ суТСниС ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°.

ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ (Π² ΠΎΠ±Ρ‰Π΅ΠΌ, нСбольшоС ΠΈ локальноС) ΠΏΠΎΡ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΌΠ½ΠΎΠ³ΠΈΡ… ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΡ… классов. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ внСсСниС Π΅Π³ΠΎ окаТСтся нСдопустимым, Π½Π΅ΠΎΠΏΡ€Π°Π²Π΄Π°Π½Π½Ρ‹ΠΌ с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния количСства усилий, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°Ρ‚Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ. Π’ΠΎ Π΅ΡΡ‚ΡŒ, объявив ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· ΠΏΠΎΠ»Π΅ ΠΈΠ»ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ°ΠΊ public, ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ Π² ситуации, ΠΊΠΎΠ³Π΄Π° малСйшиС измСнСния (ΠΈΠΌΠ΅Π½ΠΈ, Ρ‚ΠΈΠΏΠ°, характСристик, ΠΏΡ€Π°Π²ΠΈΠ» использования) Π² дальнСйшСм станут Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹.

Напротив, Ссли Π±Ρ‹ ΠΏΠΎΠ»Π΅ Π±Ρ‹Π»ΠΎ объявлСно ΠΊΠ°ΠΊ private, Π° для чтСния ΠΈ измСнСния Π΅Π³ΠΎ значСния Π±Ρ‹Π»ΠΈ Π±Ρ‹ Π²Π²Π΅Π΄Π΅Π½Ρ‹ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, ситуация помСнялась Π±Ρ‹ Π² ΠΊΠΎΡ€Π½Π΅:


public class Human {

private int age;

// ΠΌΠ΅Ρ‚ΠΎΠ΄, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΠΉ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ age

public int getAge() {

return age;

}

// ΠΌΠ΅Ρ‚ΠΎΠ΄, ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ age

public void setAge(int a) {

age=a;

}

}


Π’ этом случаС с Π΄Π°Π½Π½Ρ‹ΠΌ классом ΠΌΠΎΠ³Π»ΠΎ Π±Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ мноТСство программистов ΠΈ ΠΌΠΎΠ³Π»ΠΎ Π±Ρ‹Ρ‚ΡŒ создано большоС количСство классов, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΡ… Ρ‚ΠΈΠΏ Human, Π½ΠΎ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ private Π΄Π°Π΅Ρ‚ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡŽ, Ρ‡Ρ‚ΠΎ Π½ΠΈΠΊΡ‚ΠΎ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ этим ΠΏΠΎΠ»Π΅ΠΌ Π½Π΅ ΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π΅Π³ΠΎ Ρ‚ΠΈΠΏΠ° Π±Ρ‹Π»ΠΎ Π±Ρ‹ совсСм нСслоТной ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠ΅ΠΉ, связанной с ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΠΎΠ΄Π½ΠΎΠΌ классС.