πŸ€“ ООП. Π§Π°ΡΡ‚ΡŒ 5. Java.



Π’ΠΎΡ‚ ΠΌΡ‹ ΠΈ подошли ΠΊ языку, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ, вСроятно, внСс самый большой Π²ΠΊΠ»Π°Π΄ Π² ΠΏΠΎΠΏΡƒΠ»ΡΡ€ΠΈΠ·Π°Ρ†ΠΈΡŽ ООП Π² ΠΌΠΈΡ€Π΅. Ну ΠΈ ΠΏΠΎ ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΡ‚Π΅Π»ΡŒΡΡ‚Π²Ρƒ являСтся ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· самых (Π΄ΠΎΠ»Π³ΠΎ врСмя Π±Ρ‹Π» самым популярным) ЯП Π² ΠΌΠΈΡ€Π΅. Π˜Ρ‚Π°ΠΊ, Π½Π° сцСну Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚ Java.



Но ΠΌΡ‹ с Π²Π°ΠΌΠΈ ΠΎΡ†Π΅Π½ΠΈΠ²Π°Π΅ΠΌ ЯП с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ОО ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΡ‹. Π§Π΅Π³ΠΎ большС Π² Java? Simula ΠΈΠ»ΠΈ Smalltalk? Π”Π°Π²Π°ΠΉΡ‚Π΅ Ρ€Π°Π·Π±ΠΈΡ€Π°Ρ‚ΡŒΡΡ.



Π§Ρ‚ΠΎ ΠΎΡ‚ Simula:



1. БтатичСская типизация ΠΈ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΈ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Ρ‹ (Ρ‡Ρ‚ΠΎ позволяСт Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ высокой ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ).

2. ВсС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ всСгда хранятся Π² ΠΊΡƒΡ‡Π΅ ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ ΠΏΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŽ; ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Ρ‹ ΠΆΠ΅ Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ согласно своСму Ρ‚ΠΈΠΏΡƒ.

3. БтатичСская модСль классов, Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹.



Π§Ρ‚ΠΎ ΠΎΡ‚ Smaltalk:



1. ΠŸΡ€ΠΈ компиляции Java прСобразовываСтся Π½Π΅ Π² Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ устройства, Π° Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ "Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ" вычислитСля - Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Ρ‹. ВСроятно, Java ΠΈ здСсь стала ΠΌΠΎΡ‰Π½Π΅ΠΉΡˆΠΈΠΌ популяризатором этого ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°. Π’Π°ΠΊΠΆΠ΅, Java ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ спСцифицировала Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ своСго Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄Π°. Π’ΠΎ Π΅ΡΡ‚ΡŒ Ρƒ Java 2 спСцификации: Java Language Specification (JLS) ΠΈ Java Virtual Machine Specification (JVMS).



2. Π₯ΠΎΡ‚ΡŒ ΠΏΡ€ΠΎ Java Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ "всС Π΅ΡΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚" Π½Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΠΎ, Π²Π²ΠΈΠ΄Ρƒ наличия ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²ΠΎΠ² ΠΈ Ρ€Π°Π·Π½Ρ‹Ρ… с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚ΠΎΠ² (Π² ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ с ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π°ΠΌΠΈ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ ΠΏΠΎΠ΄Ρ‚ΠΈΠΏΠΎΠ²), Π½ΠΎ Java ΠΊΡƒΠ΄Π° Π±ΠΎΠ»Π΅Π΅ ОО Ρ‡Π΅ΠΌ Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Simula ΠΈΠ»ΠΈ C++. Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΈ Ρ‚ΡƒΡ‚ Ρ€Π°ΡΠΏΠΈΡˆΠ΅ΠΌ:



* Для ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ автоматичСский ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ ΡƒΠΏΠ°ΠΊΠΎΠ²ΠΊΠΈ Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ (autoboxing) ΠΈ распаковки Π² ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ² (unboxing). Π­Ρ‚ΠΎ создаСт иллюзию Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Ρ‹ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΡ…ΠΎΠΆΠΈ Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹. К слову, Π² Ρ‚ΠΎΠΌ ΠΆΠ΅ C++ Ρ‚ΠΎΠΆΠ΅ Π΅ΡΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Π΅ ΠΎΠ±Π΅Ρ€Ρ‚ΠΊΠΈ, Π½ΠΎ ΠΈΡ… Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ явно. Π’ Java ΠΆΠ΅ это Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ ΡƒΠ΄ΠΎΠ±Π½Π΅Π΅, Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΎΠΉ Ρ€Π΅Π·ΠΊΠΎΠ³ΠΎ падСния ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.



* Если языки Ρ‚ΠΈΠΏΠ° Simula, C++ ΠΈΠ»ΠΈ Objective Π‘ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π²Π°ΠΌ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π² ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π½ΠΎΠΌ стилС, Ρ‚ΠΎ Java Π²Π²ΠΎΠ΄ΠΈΡ‚ ОО ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π½Π° ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ ΠΈΠ΄ΠΈΠΎΠΌΡ‹. Π£ вас Π΅ΡΡ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ, Π° Π² ΠΌΠΎΠ΄ΡƒΠ»Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ класс, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½.



* Π’ Java Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½ΠΎΠ³ΠΎ программирования Ρ‡Π΅Ρ€Π΅Π· парамСтричСскиС Ρ‚ΠΈΠΏΡ‹ (generics, ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌ Π² CLU), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ, Π° Π·Π½Π°Ρ‡ΠΈΡ‚ всС ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ боксятся Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚.



* ВсС ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ, Ρ‚.Π΅. структур ΠΊΠ°ΠΊ C ΠΈΠ»ΠΈ C# Π½Π΅Ρ‚. ΠœΠ°ΡΡΠΈΠ²Ρ‹ Π² Java Ρ‚ΠΎΠΆΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹.



3. НаличиС интСрфСйсов ΠΈ абстрактных классов, Ρ‡Ρ‚ΠΎ отсылаСт ΠΊ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π°ΠΌ ΠΈΠ· Simula ΠΈ Objective C, Π° Ρ‚Π°ΠΊΠΆΠ΅ абстрактным классам Π‘++. К слову, Π² соврСмСнной Java интСрфСйсы ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π΄Π΅Ρ„ΠΎΠ»Ρ‚Π½ΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ.



Π§Ρ‚ΠΎ ΠΎΠ±Ρ‰Π΅Π³ΠΎ: сборка мусора Ρ‚ΠΈΠΏΠ° Mark&Sweep. Π’ΠΎΠΎΠ±Ρ‰Π΅ Java ΠΎΡ‡Π΅Π½ΡŒ сильно популяризовала этот ΠΏΠΎΠ΄Ρ…ΠΎΠ΄.



Π§Ρ‚ΠΎ новаторскоС:



1. Java Π±Ρ‹Π»Π° ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ языком, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Π²Π΅Π» понятиС ΠΌΠΎΠ΄Π΅Π»ΠΈ памяти. Π­Ρ‚ΠΎ Π½Π°Π±ΠΎΡ€ Ρ‚ΠΎΡ‡Π½ΠΎ описанных ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚ΠΎΠ² ΠΈ языковых конструкций, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‡Π΅Ρ‚ΠΊΠΎ ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΏΡ€ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. ΠœΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π±Ρ‹Π»ΠΎ ΠΈ Π΄ΠΎ Java, Π½ΠΎ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… строгих ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚ΠΎΠ² Ρ‚Π°ΠΌ Π½Π΅ Π±Ρ‹Π»ΠΎ. Π’ Java ΠΆΠ΅ вводится ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠΎΠ΄ΠΎΠΌ ΠΏΠΎΠ΄ 32 ΠΈ 64 Π±ΠΈΡ‚Π½Ρ‹Π΅ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹, потокобСзопасныС Ρ‚ΠΈΠΏΡ‹, конструкции volatile ΠΈ synchronized, ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ "happens before".



2. БпСцификация Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄Π°. Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²Π΅Π»ΠΎ ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Java ΠΈΠ· простого ЯП с Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ машиной ΠΏΡ€Π΅Π²Ρ€Π°Ρ‚ΠΈΠ»Π°ΡΡŒ Π² Ρ†Π΅Π»ΡƒΡŽ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡƒ. БСйчас сущСствуСт ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΎΠ΅ количСство ΡƒΠ»ΡŒΡ‚Ρ€Π°-популярных ЯП ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΡ… Java Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄. Π’ΠΎΡ‚ нСсколько ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ²: Kotlin, Scala, Clojure.



ΠŸΡ€ΠΈΡ‡ΠΈΠ½Π° популярности: Java Π½Π°Ρ‰ΡƒΠΏΠ°Π»Π° Π·ΠΎΠ»ΠΎΡ‚ΡƒΡŽ сСрСдину ΠΌΠ΅ΠΆΠ΄Ρƒ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒΡŽ/Π³ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒΡŽ ΠΈ ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒΡŽ исполнСния Π² Runtime. Java с успСхом ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для написания сСрвСров, ΠΌΠΎΠ±ΠΈΠ»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ (Android ΠΈ JavaME), дСсктопных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Eclipse ΠΈΠ»ΠΈ IntelliJ IDEA ΠΈ Ρ‚.Π΄.), Π²Ρ‹ΡΠΎΠΊΠΎΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π‘Π£Π‘Π” (Apache Derby, H2 Database, Cassandra, OrientDB, Neo4J ΠΈ Ρ‚.Π΄.) ΠΈ Π΄Π°ΠΆΠ΅ AAA ΠΈΠ³Ρ€ (Minecraft).



БСйчас Java ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ Ρ€Π°Π·Π²ΠΈΠ²Π°Ρ‚ΡŒΡΡ ΠΈ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π³ΠΎΠ΄ выходят Π½ΠΎΠ²Ρ‹Π΅ спСцификации. Как ΠΈ Ρ€Π°Π·Π²ΠΈΠ²Π°ΡŽΡ‚ΡΡ языки, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠ΅ Java ΠΊΠ°ΠΊ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡƒ.



А Π½Π° этом сСгодня всС! ВсСм Π±Π°Π·Ρ‹! πŸ’ͺ