Π Π°Π·Π½ΠΎΠ΅

Ооп языки: ООП языки программирования

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅

осваивай Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ языки прямо сСйчас

ООП ΠΈΠ»ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ – ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΠ°, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΏΠΎΡ€ΠΎΠΉ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½ΠΈΡ€ΡƒΡŽΡ‚ ΠΊΠ°ΠΊ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ всСх ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ. Π’Π°ΠΊ Π»ΠΈ это Π½Π° самом Π΄Π΅Π»Π΅?

На ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ людям приходится Π΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π² Π³ΠΎΠ»ΠΎΠ²Π΅ слоТныС абстракции ΠΈ бСспорядочныС Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ ΠΎΠ±Ρ‰ΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², ΠΏΠΎΠ΄Π²Π΅Ρ€ΠΆΠ΅Π½Π½Ρ‹Ρ… измСнСниям. Π’ ΠΈΡ‚ΠΎΠ³Π΅ Π΄Ρ€Π°Π³ΠΎΡ†Π΅Π½Π½ΠΎΠ΅ врСмя ΠΈ ΠΈΠ½Ρ‚Π΅Π»Π»Π΅ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π» тратится Π½Π° обдумывания «абстракций» ΠΈ «шаблонов проСктирования» вмСсто Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ.

ΠšΠΎΠ½Π΅Ρ‡Π½Π°Ρ Ρ†Π΅Π»ΡŒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ софта состоит Π² написании Π½Π°Π΄Ρ‘ΠΆΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°. Π—Π°Π±Π°Π³ΠΎΠ²Π°Π½Π½ΠΎΠΌΡƒ ΠΈ Π½Π΅Π½Π°Π΄Ρ‘ΠΆΠ½ΠΎΠΌΡƒ ΠΊΠΎΠ΄Ρƒ Π½Π΅ ΠΏΠΎΠΌΠΎΠ³ΡƒΡ‚ Π½ΠΈΠΊΠ°ΠΊΠΈΠ΅ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ. А Π»ΡƒΡ‡ΡˆΠΈΠΉ ΠΏΡƒΡ‚ΡŒ ΠΊ надёТности ΠΊΠΎΠ΄Π° – простота. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, главная Π·Π°Π΄Π°Ρ‡Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² – сниТСниС слоТности ΠΊΠΎΠ΄Π°.

Β«ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½Ρ‹ ΠΊΠ°ΠΊ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π° ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΌ…Β»

– ЭдсгСр Π’ΠΈΠ±Π΅ ДСйкстра, ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ структурного программирования.

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ создавалось с ΠΎΠ΄Π½ΠΎΠΉ Ρ†Π΅Π»ΡŒΡŽ: ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, ΠΎΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ΡŒ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΊΠΎΠ΄Π°. ΠœΠ΅ΠΆΠ΄Ρƒ Ρ‚Π΅ΠΌ, Π½Π΅ сущСствуСт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠ³ΠΎ Π΄ΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π²Π° прСвосходства ООП Π½Π°Π΄ чистым ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π½Ρ‹ΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ.

Π“ΠΎΡ€ΡŒΠΊΠ°Ρ ΠΏΡ€Π°Π²Π΄Π° состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ООП Ρ‚Π΅Ρ€ΠΏΠΈΡ‚ Π½Π΅ΡƒΠ΄Π°Ρ‡Ρƒ Π² СдинствСнной поставлСнной Π΅ΠΌΡƒ Π·Π°Π΄Π°Ρ‡Π΅. Оно выглядит Ρ…ΠΎΡ€ΠΎΡˆΠΎ Π½Π° Π±ΡƒΠΌΠ°Π³Π΅, Π³Π΄Π΅ Ρƒ нас чистыС ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ ΠΆΠΈΠ²ΠΎΡ‚Π½Ρ‹Ρ…, собак, людСй ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅. Всё это Ρ€ΡƒΡˆΠΈΡ‚ΡΡ ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ роста слоТности прилоТСния. ВмСсто пониТСния слоТности ΠΎΠ½ΠΎ поощряСт бСспорядочноС совмСстноС использованиС измСняСмого состояния ΠΈ вносит Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ с Π΅Π³ΠΎ многочислСнными шаблонами проСктирования. ООП услоТняСт Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³ ΠΈ тСстированиС.

МногиС Π½Π΅ согласятся, Π½ΠΎ ΠΏΡ€Π°Π²Π΄Π° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ соврСмСнноС ООП Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π»ΠΎΡΡŒ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ. Оно Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΎΠΏΠΈΡ€Π°Π»ΠΎΡΡŒ Π½Π° ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹Π΅ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ институты (Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Haskell/FP). Π£ ООП Π½Π΅Ρ‚ дСсятилСтий строгих Π½Π°ΡƒΡ‡Π½Ρ‹Ρ… исслСдований. Лямбда-исчислСния ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽΡ‚ ΠΏΠΎΠ»Π½ΡƒΡŽ Ρ‚Π΅ΠΎΡ€Π΅Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ основу для Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ программирования. Π£ ООП Π½Π΅Ρ‚ Π½ΠΈΡ‡Π΅Π³ΠΎ Π±Π»ΠΈΠ·ΠΊΠΎΠ³ΠΎ ΠΊ этому. По Π±ΠΎΠ»ΡŒΡˆΠΎΠΌΡƒ счёту, ООП «просто ΡΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒΒ».

ООП-ΠΊΠΎΠ΄ Π½Π΅Π΄Π΅Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ программирования Π½Π°ΠΌ Π½Π΅ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΉ Π²Ρ‹Π²ΠΎΠ΄ ΠΏΡ€ΠΈ ΠΎΠ΄Π½ΠΎΠΌ ΠΈ Ρ‚ΠΎΠΌ ΠΆΠ΅ Π²Π²ΠΎΠ΄Π΅. Π’ качСствС ΡƒΠΏΡ€ΠΎΡ‰Ρ‘Π½Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°: 2 + 2 ΠΈΠ»ΠΈ calculator.Add(2, 2) Π΄Π°ΡŽΡ‚ Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄Π΅ 4, Π½ΠΎ ΠΈΠ½ΠΎΠ³Π΄Π° ΠΌΠΎΠ³Ρƒ Π΄Π°Ρ‚ΡŒ 3, 5 ΠΈΠ»ΠΈ Π²ΠΎΠΎΠ±Ρ‰Π΅ 1004. Зависимости ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Calculator ΠΌΠΎΠ³ΡƒΡ‚ ΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ вычислСний Π² Ρ‚ΠΎΠ½ΠΊΠΎΠΉ, Π½ΠΎ Π³Π»ΡƒΠ±ΠΎΠΊΠΎΠΉ ΠΌΠ°Π½Π΅Ρ€Π΅.

Β«C++ – уТасный [ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ] язык… ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ вашСго ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π΄ΠΎ C ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ люди Π½Π΅ ΠΎΠ±Π»Π°ΠΆΠ°ΡŽΡ‚ΡΡ с ΠΊΠ°ΠΊΠΎΠΉ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ идиотской «ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠΉ модСлью»c&@p.Β» – Линус Π’ΠΎΡ€Π²Π°Π»ΡŒΠ΄Ρ, ΡΠΎΠ·Π΄Π°Ρ‚Π΅Π»ΡŒ Linux.

Линус Π’ΠΎΡ€Π²Π°Π»ΡŒΠ΄Ρ извСстСн своСй ΠΊΡ€ΠΈΡ‚ΠΈΠΊΠΎΠΉ Π² адрСс C++ ΠΈ ООП. Он ΠΏΡ€Π°Π² Π²Β ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΈ программистов. Π§Π΅ΠΌ мСньшС Π²Ρ‹Π±ΠΎΡ€Π° Ρƒ программиста, Ρ‚Π΅ΠΌ Π³ΠΈΠ±Ρ‡Π΅ становится Π΅Π³ΠΎ ΠΊΠΎΠ΄. Π’ Ρ†ΠΈΡ‚Π°Ρ‚Π΅ Π²Ρ‹ΡˆΠ΅ Линус Π’ΠΎΡ€Π²Π°Π»ΡŒΠ΄Ρ Π½Π°ΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅Ρ‚Β ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΉ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ ΠΊΠ°ΠΊ Π±Π°Π·Ρƒ для ΠΊΠΎΠ΄Π°.

Многим Π½Π΅ нравятся Π·Π½Π°ΠΊΠΈ ограничСния скорости Π½Π° Π΄ΠΎΡ€ΠΎΠ³Π΅, Π½ΠΎ ΠΎΠ½ΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ для прСдотвращСния нСсчастных случаСв. Π₯ΠΎΡ€ΠΎΡˆΠΈΠΉ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ Π΄ΠΎΠ»ΠΆΠ΅Π½ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ Π³Π»ΡƒΠΏΡ‹Π΅ дСйствия.

Π₯ΠΎΡ€ΠΎΡˆΠΈΠΉ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½Π°Π΄Ρ‘ΠΆΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄. Он Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΠΌΠΎΠ³Π°Ρ‚ΡŒ ΡΠ½ΠΈΠΆΠ°Ρ‚ΡŒ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ:

  1. ΠœΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ использования.
  2. ΠŸΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΉ изоляции состояний.
  3. Высокого ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ сигнал/ΡˆΡƒΠΌ.

К Π½Π΅ΡΡ‡Π°ΡΡ‚ΡŒΡŽ, ООП прСдоставляСт Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ слишком ΠΌΠ½ΠΎΠ³ΠΎ инструмСнтов Π±Π΅Π· ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ. Π”Π°ΠΆΠ΅ Ссли ООП ΠΎΠ±Π΅Ρ‰Π°Π΅Ρ‚ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡŽ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ использования, Π΅ΠΌΡƒ Π½Π΅ удаётся Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ обСщания (Π΄Π°Π»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅ΠΉ). ООП-ΠΊΠΎΠ΄ поощряСт использованиС ΠΎΠ±Ρ‰ΠΈΡ… измСняСмых состояний, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ снова ΠΈ снова Π΄ΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ свою Π½Π΅Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ.

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅

НСкоторыС люди склонны ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΡ‡Π΅Π½ΡŒ слоТной ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΠΎΠΉ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Π½Π°ΡƒΡ‡Π½ΠΎΠΉ срСдС, ΠΈ которая Π½Π΅ΠΏΡ€ΠΈΠ³ΠΎΠ΄Π½Π° для Β«Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΌΠΈΡ€Π°Β». ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, это Π½Π΅ Ρ‚Π°ΠΊ!

Π”Π°, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΠΎΠ΄ собой сильноС матСматичСскоС основаниС ΠΈ ΡƒΡ…ΠΎΠ΄ΠΈΡ‚ своими корнями Π² лямбда-исчислСния. Но Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΈΠ΄Π΅ΠΉ Π²ΠΎΠ·Π½ΠΈΠΊΠ»ΠΈ Π² Π½Ρ‘ΠΌ, ΠΊΠ°ΠΊ ΠΎΡ‚Π²Π΅Ρ‚ Π½Π° ΡΠ»Π°Π±ΠΎΡΡ‚ΡŒ мСйнстримных языков программирования. Ѐункция – это основная абстракция Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ программирования. ΠŸΡ€ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΌ использовании Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π΄Π°ΡŽΡ‚ ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ΅ использованиС ΠΊΠΎΠ΄Π°, Π½Π΅Π²ΠΈΠ΄Π°Π½Π½ΠΎΠ΅ Π² ООП.

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ справляСтся с Π·Π°Π΄Π°Ρ‡Π΅ΠΉ написания Π½Π°Π΄Ρ‘ΠΆΠ½ΠΎΠ³ΠΎ софта. ΠΠ΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Π² Π΄Π΅Π±Π°Π³Π³Π΅Ρ€Π΅ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ исчСзаСт. Π‘ΠΎΠ»ΡŒΡˆΠ΅ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒΡΡ ΠΏΠΎ своСму ΠΊΠΎΠ΄Ρƒ ΠΈ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅.

НаконСц, Ссли Π²Ρ‹ ΡƒΠΌΠ΅Π΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π²Ρ‹ ΡƒΠΆΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ программист. ΠžΡΡ‚Π°Π»ΠΎΡΡŒ Π½Π°ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π°ΠΈΠ»ΡƒΡ‡ΡˆΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ!

«МнС ΠΎΡ‡Π΅Π½ΡŒ Таль, Ρ‡Ρ‚ΠΎ я Π΄Π°Π²Π½ΠΎ Π²Π²Ρ‘Π» Ρ‚Π΅Ρ€ΠΌΠΈΠ½ «ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹» для этой Ρ‚Π΅ΠΌΡ‹, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½ заставляСт ΠΌΠ½ΠΎΠ³ΠΈΡ… людСй ΡΠΎΡΡ€Π΅Π΄ΠΎΡ‚ΠΎΡ‡ΠΈΡ‚ΡŒΡΡ Π½Π° мСньшСй ΠΈΠ΄Π΅Π΅. Основная идСя – ΠΎΠ±ΠΌΠ΅Π½ сообщСниями.Β» – Алан Кэй, ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΏΠΈΠΎΠ½Π΅Ρ€ΠΎΠ² Π² областях ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ программирования.

Алан Кэй ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Π» Ρ‚Π΅Ρ€ΠΌΠΈΠ½ Β«ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅Β» Π° 1960Ρ…. Благодаря своСму биологичСскому бэкграунду ΠΎΠ½ пытался ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΡŽ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½Ρ‹ΠΌΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌΠΈ ΠΏΠΎ подобию ΠΆΠΈΠ²Ρ‹Ρ… ΠΊΠ»Π΅Ρ‚ΠΎΠΊ.

Основная идСя Алана Кэя состояла Π² ΠΊΠΎΠΌΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ нСзависимыми ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌΠΈ (ΠΊΠ»Π΅Ρ‚ΠΊΠ°ΠΌΠΈ). БостояниС нСзависимых ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Ρ€Π°ΡΠΊΡ€Ρ‹Π²Π°Π»ΠΎΡΡŒ Π²Π½Π΅ΡˆΠ½Π΅ΠΌΡƒ ΠΌΠΈΡ€Ρƒ (инкапсуляция).

Π’ΠΎΡ‚ ΠΈ всё. ООП Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π±Ρ‹Π»ΠΎ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΎ для Ρ‚Π°ΠΊΠΈΡ… Π²Π΅Ρ‰Π΅ΠΉ, ΠΊΠ°ΠΊ наслСдованиС, ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ, ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова Β«newΒ» ΠΈ нСсчётного количСства шаблонов проСктирования.

Чистый ООП

Erlang – это ООП Π² чистом Π²ΠΈΠ΄Π΅. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° мСйнстримных языков, ΠΎΠ½ сосрСдотачиваСтся Π²ΠΎΠΊΡ€ΡƒΠ³ Π³Π»Π°Π²Π½ΠΎΠΉ ΠΈΠ΄Π΅ΠΈ ООП – ΠΎΠ±ΠΌΠ΅Π½Π° сообщСниями. Π’ Erlang ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ ΠΏΡƒΡ‚Ρ‘ΠΌ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ нСизмСняСмых сообщСний ΠΌΠ΅ΠΆΠ΄Ρƒ собой.

А Π΅ΡΡ‚ΡŒ Π»ΠΈ Π΄ΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π²Π° прСвосходства нСизмСняСмых сообщСний Π½Π°Π΄ Π²Ρ‹Π·ΠΎΠ²Π°ΠΌΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²?

ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ!Β Erlang – это, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, самый Π½Π°Π΄Ρ‘ΠΆΠ½Ρ‹ΠΉ язык Π² ΠΌΠΈΡ€Π΅. Он ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΎΡΠ½ΠΎΠ²Π½ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ ΠΌΠΈΡ€ΠΎΠ²ΠΎΠΉ инфраструктуры Ρ‚Π΅Π»Π΅ΠΊΠΎΠΌΠ° (ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π°). НСкоторыС систСмы, написанныС Π½Π° Erlang Π½Π°Π΄Ρ‘ΠΆΠ½Ρ‹ Π½Π° 99.9999999%.

Π‘Π°ΠΌΡ‹ΠΉ Π²Π°ΠΆΠ½Ρ‹ΠΉ аспСкт Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ – это постоянноС ΠΏΠΎΠ½ΠΈΠΆΠ΅Π½ΠΈΠ΅ уровня слоТности. ΠšΡ€Π°ΡΠΈΠ²Ρ‹Π΅ Ρ„ΠΈΡ‡ΠΈ Ρ‚Π΅Ρ€ΡΡŽΡ‚ смысл Π² ΠΊΠΎΠ΄Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ. Π”Π°ΠΆΠ΅ 100% ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ тСстами Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ стоит, Ссли ΠΊΠΎΠ΄ становится слишком слоТным.

Π§Ρ‚ΠΎ услоТняСт ΠΊΠΎΠ΄? Π’ основном ΠΎΠ±Ρ‰Π΅Π΅ измСняСмоС состояниС, ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½Ρ‹Π΅ абстракции, Π½ΠΈΠ·ΠΊΠΎΠ΅ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ сигнал/ΡˆΡƒΠΌ (часто Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ΅ ΡˆΠ°Π±Π»ΠΎΠ½Π½Ρ‹ΠΌ ΠΊΠΎΠ΄ΠΎΠΌ). Всё это распространСно Π² ООП.

Β«Π― Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ большиС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π±ΠΎΡ€ΡŽΡ‚ΡΡ со ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ, Π²ΠΎΠ·Ρ€Π°ΡΡ‚Π°ΡŽΡ‰Π΅ΠΉ ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ построСния большого Π³Ρ€Π°Ρ„ΠΈΠΊΠ° измСняСмых ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². Ну, Π·Π½Π°Π΅Ρ‚Π΅, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ ΠΏΡ‹Ρ‚Π°Π΅Ρ‚Π΅ΡΡŒ ΠΏΠΎΠ½ΡΡ‚ΡŒ ΠΈ Π΄Π΅Ρ€ΠΆΠΈΡ‚Π΅ Π² памяти Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Ρ‘Ρ‚ ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹Π΅ эффСкты.Β» – Π ΠΈΡ‡Π°Ρ€Π΄ Π₯ΠΈΠΊΠΊΠΈ, ΡΠΎΠ·Π΄Π°Ρ‚Π΅Π»ΡŒ языка программирования Clojure.

БостояниС само ΠΏΠΎ сСбС Π±Π΅Π·Π²Ρ€Π΅Π΄Π½ΠΎ. Но измСняСмоС состояниС – это большой Π½Π°Ρ€ΡƒΡˆΠΈΡ‚Π΅Π»ΡŒ. ОсобСнно Ссли ΠΎΠ½ΠΎ ΠΎΠ±Ρ‰Π΅Π΅. Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ измСняСмоС состояниС? Π›ΡŽΠ±ΠΎΠ΅ состояниС, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒΡΡ. Π’ΠΎ Π΅ΡΡ‚ΡŒ, ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈΠ»ΠΈ поля Π² ООП.

ООП ΡƒΡ…ΡƒΠ΄ΡˆΠ°Π΅Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ΄Π°, разбрасывая состояния ΠΏΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅. Π—Π°Ρ‚Π΅ΠΌ Ρ€Π°Π·Ρ€ΠΎΠ·Π½Π΅Π½Π½ΠΎΠ΅ состояниС бСспорядочно дСлится ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ.

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌΠ°

БСспорядочный доступ ΠΊ измСняСмому ΡΠΎΡΡ‚ΠΎΡΠ½ΠΈΡŽ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π² Ρ‚Π°ΠΊΠΎΠΌ ΠΊΠΎΠ΄Π΅ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠΉ. Для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π±Ρ‹Π» ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ слоТный ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ. Π‘Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², ΠœΡŒΡŽΡ‚Π΅ΠΊΡ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ слоТныС ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΠΎΠ½ΠΈ ΠΈΠΌΠ΅ΡŽΡ‚ нСдостатки – Π²Π·Π°ΠΈΠΌΠ½Ρ‹Π΅ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ, Π½Π΅Ρ…Π²Π°Ρ‚ΠΊΠ° композиционности, Π° ΠΎΡ‚Π»Π°Π΄ΠΊΠ° ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΎΡ‡Π΅Π½ΡŒ слоТна ΠΈ ΠΎΡ‚Π½ΠΈΠΌΠ°Π΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.

НС всС состояния – Π·Π»ΠΎ

ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ΡΡ, состояния – Π·Π»ΠΎ? НСт, ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ состояния, Π½Π°Π²Π΅Ρ€Π½ΠΎΠ΅, Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ Π² случаях настоящСй изоляции (Π½Π΅ ООП-изоляции).

Π’ΠΏΠΎΠ»Π½Π΅ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ нСизмСняСмыС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π΄Π°Π½Π½Ρ‹Ρ…. ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово здСсь – «нСизмСняСмыС». Π’Π°ΠΊΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠ΅ΠΆΠ΄Ρƒ функциями.

Π’Π°ΠΊ ΠΈΠ»ΠΈ ΠΈΠ½Π°Ρ‡Π΅, Ρ‚Π°ΠΊΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΡΠ΄Π΅Π»Π°ΡŽΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈ свойства ООП Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½Ρ‹ΠΌΠΈ. Какой смысл Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π°Ρ… ΠΈ свойствах ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Ссли ΠΎΠ½ΠΈ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Ρ‹?

Нам Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΈ, Ρ‡Ρ‚ΠΎ инкапсуляция – ΠΎΠ΄Π½ΠΎ ΠΈΠ· Π³Π»Π°Π²Π½Ρ‹Ρ… прСимущСств ООП. Она Π΄ΠΎΠ»ΠΆΠ½Π° Π·Π°Ρ‰ΠΈΡ‰Π°Ρ‚ΡŒ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π΅ состояниС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΎΡ‚ внСшнСго доступа. Π‘ этим Ρ‚ΠΎΠΆΠ΅ Π΅ΡΡ‚ΡŒ нСбольшая ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°. Она Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚.

Π˜Π½ΠΊΠ°ΠΏΡΡƒΠ»ΡΡ†ΠΈΡ – это троянский конь ООП. Он ΠΏΡ€ΠΎΠ΄Π°Ρ‘Ρ‚ идСю ΠΎΠ±Ρ‰Π΅Π³ΠΎ измСняСмого состояния ΠΏΠΎΠ΄ ΠΏΡ€Π΅Π΄Π»ΠΎΠ³ΠΎΠΌ бСзопасности. Π˜Π½ΠΊΠ°ΠΏΡΡƒΠ»ΡΡ†ΠΈΡ позволяСт (ΠΈ Π΄Π°ΠΆΠ΅ поощряСт) ΠΏΡ€ΠΎΠ½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠ΅ нСбСзопасного ΠΊΠΎΠ΄Π° Π² наши исходники.

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° глобального состояния

Нам Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΈ, Ρ‡Ρ‚ΠΎ глобальноС состояниС – ΠΊΠΎΡ€Π΅Π½ΡŒ всСх Π·ΠΎΠ». НуТно ΠΈΠ·Π±Π΅Π³Π°Ρ‚ΡŒ Π΅Π³ΠΎ, Ρ‡Π΅Π³ΠΎ Π±Ρ‹ это Π½ΠΈ стоило. Нам Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΈ, Ρ‡Ρ‚ΠΎ инкапсуляция, ΠΏΠΎ Ρ„Π°ΠΊΡ‚Ρƒ, Π²Π΅Ρ€ΡˆΠΈΠ½Π° глобального состояния.

Для эффСктивности ΠΊΠΎΠ΄Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ Π½Π΅ свои значСния, Π° ΠΈΡ… ссылки. Π’ΠΎΡ‚ Π³Π΄Π΅ Β«Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ зависимости» Ρ‚Π΅Ρ€ΠΏΠΈΡ‚ Π½Π΅ΡƒΠ΄Π°Ρ‡Ρƒ.

Когда ΠΌΡ‹ создаём ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π² ООП, ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‘ΠΌ ссылку Π½Π° Π΅Π³ΠΎ зависимости Π² конструктор. Π­Ρ‚ΠΈ зависимости Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΠΌΠ΅ΡŽΡ‚ собствСнныС Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ состояния. Π’Π½ΠΎΠ²ΡŒ созданный ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ с Ρ€Π°Π΄ΠΎΡΡ‚ΡŒΡŽ Ρ…Ρ€Π°Π½ΠΈΡ‚ ссылки Π½Π° эти зависимости Π² своём Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΌ состоянии, Π° Π·Π°Ρ‚Π΅ΠΌ с Ρ€Π°Π΄ΠΎΡΡ‚ΡŒΡŽ измСняСт ΠΈΡ… Π»ΡŽΠ±Ρ‹ΠΌ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΌ для Π½Π΅Π³ΠΎ способом. А Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠ½ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‘Ρ‚ эти ссылки всСму ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ Π² ΠΈΡ‚ΠΎΠ³Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ.

Π­Ρ‚ΠΎ создаёт слоТный Π³Ρ€Π°Ρ„ΠΈΠΊ бСспорядочных общСдоступных ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠ΅Π½ΡΡŽΡ‚ состояния Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Π°. Π§Ρ‚ΠΎ, Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΠΎΠ³Ρ€ΠΎΠΌΠ½Ρ‹ΠΌ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΡ‚ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρƒ измСнСния состояния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ становится практичСски Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ. МоТно ΠΏΠΎΡ‚Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ Π΄Π½Π΅ΠΉ Π½Π° ΠΎΡ‚Π»Π°Π΄ΠΊΡƒ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ состояния. И Π²Π°ΠΌ ΠΏΠΎΠ²Π΅Π·Π»ΠΎ, Ссли Π²Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Ρ€Π°Π·Π±ΠΈΡ€Π°Ρ‚ΡŒΡΡ Π΅Ρ‰Ρ‘ ΠΈ с ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌΠΎΠΌ.

ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹/Бвойства

ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈ свойства, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ доступ ΠΊ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹ΠΌ полям Π½ΠΈΡ‡Π΅ΠΌ Π½Π΅ Π»ΡƒΡ‡ΡˆΠ΅ прямого измСнСния ΠΏΠΎΠ»Π΅ΠΉ. НСваТно мСняСтС Π»ΠΈ Π²Ρ‹ состояниС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ красивого свойства ΠΌΠ΅Ρ‚ΠΎΠ΄Π° – Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΎΠ΄ΠΈΠ½: ΠΈΠ·ΠΌΠ΅Π½Ρ‘Π½Π½ΠΎΠ΅ состояниС.

Π‘ΠΏΠΎΠΉΠ»Π΅Ρ€: Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅. πŸ™‚

Если Ρ‚Π°ΠΊΠΈΠ΅ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Ρ‹, ΠΊΠ°ΠΊ Ρ„ΡƒΠ½ΠΊΡ‚ΠΎΡ€Ρ‹ ΠΈ ΠΌΠΎΠ½Π°Π΄Ρ‹ Π½ΠΈ ΠΎ Ρ‡Ρ‘ΠΌ Π²Π°ΠΌ Π½Π΅ говорят, Ρ‚ΠΎ Π²Ρ‹ Π½Π΅ ΠΎΠ΄ΠΈΠ½ΠΎΠΊΠΈ! Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π΅ Π±Ρ‹Π»ΠΎ Π±Ρ‹ Ρ‚Π°ΠΊΠΈΠΌ ΠΏΡƒΠ³Π°ΡŽΡ‰ΠΈΠΌ ΠΈΠΌΠ΅ΠΉ ΠΎΠ½ΠΎ Π±ΠΎΠ»Π΅Π΅ ΠΈΠ½Ρ‚ΡƒΠΈΡ‚ΠΈΠ²Π½Ρ‹Π΅ названиями основных ΠΈΠ΄Π΅ΠΉ. Π€ΡƒΠ½ΠΊΡ‚ΠΎΡ€Ρ‹ – это Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, list.map. ΠœΠΎΠ½Π°Π΄Ρ‹ – просто Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ° связанных вычислСний!

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ сдСлаСт ΠΈΠ· вас Π»ΡƒΡ‡ΡˆΠ΅Π³ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°. Π’Ρ‹ Π½Π°ΠΊΠΎΠ½Π΅Ρ†-Ρ‚ΠΎ Π½Π°Ρ‡Π½Ρ‘Ρ‚Π΅ ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π΅ΡˆΠ°Π΅Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΌΠΈΡ€Π°, вмСсто Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ‚Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ врСмя Π½Π° ΠΎΠ±Π΄ΡƒΠΌΡ‹Π²Π°Π½ΠΈΠ΅ абстракций ΠΈ шаблонов проСктирования.

Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²Ρ‹ Π΅Ρ‰Ρ‘ Π½Π΅ осознали сСбя Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΌ программистом. Π’Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² повсСднСвной Ρ€Π°Π±ΠΎΡ‚Π΅? Π”Π°? Π’ΠΎΠ³Π΄Π° Π²Ρ‹ ΡƒΠΆΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ программист! ΠžΡΡ‚Π°Π»ΠΎΡΡŒ Π½Π°ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ эффСктивному использованию Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ.

Π”Π²Π° Ρ…ΠΎΡ€ΠΎΡˆΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… языка с Π»Ρ‘Π³ΠΊΠΈΠΌ ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅ΠΌ – это Elixir ΠΈ Elm. Они ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡƒ ΡΠΎΡΡ€Π΅Π΄ΠΎΡ‚ΠΎΡ‡ΠΈΡ‚ΡŒΡΡ Π½Π° Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π²Π°ΠΆΠ½ΠΎ – Π½Π° написании Π½Π°Π΄Ρ‘ΠΆΠ½ΠΎΠ³ΠΎ софта ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΈ слоТности Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… языков.

ΠΠ»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Ρ‹? Π’Π°ΡˆΠ° организация ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ C#? ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ F# – классный Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ язык, совмСстимый с .NET. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Java? Π’ΠΎΠ³Π΄Π° Scala ΠΈ Clojure – Π½Π΅ΠΏΠ»ΠΎΡ…ΠΈΠ΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ для вас. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ JavaScript? Π‘ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΌ руководством ΠΈ Π»ΠΈΠ½Ρ‚ΠΈΠ½Π³ΠΎΠΌ JavaScript прСвращаСтся Π² Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ язык.

А Π²Ρ‹ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ ΠΎΡ‚ΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ ООП?

ΠŸΠ΅Ρ€Π²Ρ‹Π΅ языки ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ программирования (ООП)

ο»Ώο»Ώ







ΠŸΠ΅Ρ€Π²Ρ‹Π΅ языки ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ программирования (ООП) Π½Π° сайтС Π˜Π³ΠΎΡ€Ρ Π“Π°Ρ€ΡˆΠΈΠ½Π°










Π’ Β ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… языках программирования ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π² Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ классы (ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹).
Благодаря этому достигаСтся Π±ΠΎΠ»Π΅Π΅ высокий ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ структуризации ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.
ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, ΠΏΠΎΡ€ΠΎΠΆΠ΄Ρ‘Π½Π½Ρ‹Π΅ ΠΎΡ‚ классов Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ (Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹) Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Π°
ΠΈ ΠΌΠ΅Π½ΡΡŽΡ‚ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ состояниС свойств (ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…).

Π‘ Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ-матСматичСской стороны ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ способ написания ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ базируСтся Π½Π° ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π½ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ программирования,
Π½ΠΎ с ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ стороны ООП базируСтся Π½Π΅ Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π° Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅, ΠΊΠ°ΠΊ цСлостной систСмС,
ΠΈΠΌΠ΅ΡŽΡ‰Π΅ΠΉ стандартный автоматичСский ΠΌΠ΅ΠΆΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ интСрфСйс.


ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΈ сразу послС появлСния языков Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅Π³ΠΎ поколСния (1967 Π³.) Π²Π΅Π΄ΡƒΡ‰ΠΈΠ΅ спСциалисты Π² области программирования
Π²Ρ‹Π΄Π²ΠΈΠ½ΡƒΠ»ΠΈ идСю прСобразования постулата Ρ„ΠΎΠ½ НСймана: Β«Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π΅Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠΌΡ‹ Π² памяти ΠΌΠ°ΡˆΠΈΠ½Ρ‹Β».
Π˜Ρ… Ρ†Π΅Π»ΡŒ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π»Π°ΡΡŒ Π² максимальном сблиТСнии Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.
Π‘Ρ‹Π»ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Ρ‹ Ρ‚Ρ€ΠΈ ΠΎΡΠ½ΠΎΠ²ΠΎΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‰ΠΈΡ… ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ° Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΡ‚ΠΎΠΌ стало Π½Π°Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ (ООП):

  1. наслСдованиС;
  2. инкапсуляция;
  3. ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ.


ΠŸΠ΅Ρ€Π²Ρ‹ΠΌ языком программирования, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π±Ρ‹Π»ΠΈ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½Ρ‹ основныС понятия, впослСдствии слоТившиСся Π² ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΡƒ, Π±Ρ‹Π»Π° Simula-1,
Π½ΠΎ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ Β«ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Π°Ρ ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΡΡ‚ΡŒΒ» Π½Π΅ использовался Π² контСкстС использования этого языка.
Π’ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π΅Π³ΠΎ появлСния Π² 1967 Π³ΠΎΠ΄Ρƒ Π² Π½Ρ‘ΠΌ Π±Ρ‹Π»ΠΈ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½Ρ‹ Ρ€Π΅Π²ΠΎΠ»ΡŽΡ†ΠΈΠΎΠ½Π½Ρ‹Π΅ ΠΈΠ΄Π΅ΠΈ: ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, классы, Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈ Π΄Ρ€.,
ΠΎΠ΄Π½Π°ΠΊΠΎ это всё Π½Π΅ Π±Ρ‹Π»ΠΎ воспринято соврСмСнниками ΠΊΠ°ΠΊ Π½Π΅Ρ‡Ρ‚ΠΎ Π³Ρ€Π°Π½Π΄ΠΈΠΎΠ·Π½ΠΎΠ΅.
ЀактичСски, Π‘ΠΈΠΌΡƒΠ»Π° Π±Ρ‹Π»Π° «Алголом с классами», ΡƒΠΏΡ€ΠΎΡ‰Π°ΡŽΡ‰ΠΈΠΌ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π½ΠΎΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΌΠ½ΠΎΠ³ΠΈΡ… слоТных ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΉ.

ΠŸΠΎΠ½ΡΡ‚ΠΈΠ΅ класса Π² Π‘ΠΈΠΌΡƒΠ»Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ Ρ‡Π΅Ρ€Π΅Π· ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ конструкций Алгола
(Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ класс Π² Π‘ΠΈΠΌΡƒΠ»Π΅ β€” это Π½Π΅Ρ‡Ρ‚ΠΎ слоТноС, описываСмоС посрСдством ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²ΠΎΠ²).
ΠŸΡ€ΠΈ этом класс ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² качСствС прСфикса ΠΊ Π΄Ρ€ΡƒΠ³ΠΈΠΌ классам, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ становятся Π² этом случаС подклассами ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ.

ВпослСдствии Π‘ΠΈΠΌΡƒΠ»Π°-1 Π±Ρ‹Π» ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½, ΠΈ появился ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΉ ООП-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ язык программирования – Simula-67.


Взгляд Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Β«ΠΏΠΎΠ΄ Π½ΠΎΠ²Ρ‹ΠΌ ΡƒΠ³Π»ΠΎΠΌΒ» (ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΌ ΠΎΡ‚ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π½ΠΎΠ³ΠΎ) ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΠ»ΠΈ Алан Кэй ΠΈ Дэн Ингаллс Π² языкС Smalltalk.
Π—Π΄Π΅ΡΡŒ понятиС класса стало ΠΎΡΠ½ΠΎΠ²ΠΎΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‰Π΅ΠΉ ΠΈΠ΄Π΅Π΅ΠΉ для всСх ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… конструкций языка
(Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ класс Π² Π‘ΠΌΠΎΠ»Ρ‚ΠΎΠΊΠ΅ являСтся ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²ΠΎΠΌ, посрСдством ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ описаны Π±ΠΎΠ»Π΅Π΅ слоТныС конструкции).
ИмСнно ΠΎΠ½ стал ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ ΡˆΠΈΡ€ΠΎΠΊΠΎ распространённым ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ языком программирования.


Как Π²Ρ‹ΡΡΠ½ΠΈΠ»ΠΎΡΡŒ, ООП оказалось ΠΏΡ€ΠΈΠ³ΠΎΠ΄Π½Ρ‹ΠΌ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для модСлирования (Simula) ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ графичСских ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ (SmallTalk),
Π½ΠΎ ΠΈ для создания Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Π° Π΅Π³ΠΎ ΠΏΡ€ΠΈΠ±Π»ΠΈΠΆΠ΅Π½Π½ΠΎΡΡ‚ΡŒ ΠΊ чСловСчСскому ΠΌΡ‹ΡˆΠ»Π΅Π½ΠΈΡŽ ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ
ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎΠ³ΠΎ использования ΠΊΠΎΠ΄Π° сдСлали Π΅Π³ΠΎ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π±ΡƒΡ€Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΉ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ.


Π’ настоящСС врСмя количСство ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½Ρ‹Ρ… языков программирования,
Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΡƒ, являСтся наибольшим ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡŽ ΠΊ Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΠ°ΠΌ.
НаиболСС распространённыС Π² ΠΏΡ€ΠΎΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΎΡΡ‚ΠΈ языки (Π‘++, Delphi, C#, Java ΠΈ Π΄Ρ€.) Π²ΠΎΠΏΠ»ΠΎΡ‰Π°ΡŽΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΡƒΡŽ модСль Π‘ΠΈΠΌΡƒΠ»Ρ‹.
ΠŸΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ языков, ΠΎΠΏΠΈΡ€Π°ΡŽΡ‰ΠΈΡ…ΡΡ Π½Π° модСль Π‘ΠΌΠΎΠ»Ρ‚ΠΎΠΊΠ°, ΡΠ²Π»ΡΡŽΡ‚ΡΡ Python, Ruby.



Π Π°Π·Π΄Π΅Π»Ρ‹ страницы ΠΎ ΠΏΠ΅Ρ€Π²Ρ‹Ρ… языках ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ программирования:

  • Simula (Би́мула — «ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Алгол») — 1967 Π³.
  • Π―Π·Ρ‹ΠΊ абстрактных Π΄Π°Π½Π½Ρ‹Ρ… ΠšΠ»Ρƒ (Clu) — 1974 Π³.
  • SmallTalk (Бмо́лток) — 1980 Π³.
  • ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ язык систСмного программирования C++ — 1980-Π΅ Π³.Π³.
  • Π―Π·Ρ‹ΠΊ ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Π½ΠΎΠ³ΠΎ программирования Eifel





Simula (Би́мула — «ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Алгол») — 1967 Π³.


Simula (Би́мула) β€” язык программирования ΠΎΠ±Ρ‰Π΅Π³ΠΎ назначСния для модСлирования слоТных систСм.
Он Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½ Π² ΠΊΠΎΠ½Ρ†Π΅ 60-Ρ… сотрудниками НорвСТского Π’Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ Π¦Π΅Π½Ρ‚Ρ€Π° (Осло) ΠšΡ€ΠΈΡΡ‚Π΅Π½ΠΎΠΌ ΠΡŽΠ³ΠΎΡ€Π΄ΠΎΠΌ ΠΈ ОлС-Π™ΠΎΡ…Π°Π½ΠΎΠΌ Π”Π°Π»Π΅ΠΌ
ΠΈ Π±Ρ‹Π» прСдставлСн ΠΊΠ°ΠΊ Simula-67.

Π‘ΠΈΠΌΡƒΠ»Π° Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎ считаСтся ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ Π² ΠΌΠΈΡ€Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ языком,
Π½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚Π΅Π»ΡŒ языка Smalltalk Алан Кэй ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΎΠ½ ΠΈΠ·ΠΎΠ±Ρ€Ρ‘Π» Ρ‚Π΅Ρ€ΠΌΠΈΠ½ «ООП».
Π‘ΠΈΠΌΡƒΠ»Ρƒ 67 ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠ΅ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ Алгола 60.


Simula 67 явилась ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ языком с встроСнной ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ основных ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠ² ООП.
Π­Ρ‚ΠΎΡ‚ язык Π² Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ стСпСни ΠΎΠΏΠ΅Ρ€Π΅Π΄ΠΈΠ» своё врСмя. Π•Π³ΠΎ соврСмСнники (программисты 60-Ρ… Π³ΠΎΠ΄ΠΎΠ²) оказались Π½Π΅ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ Π²ΠΎΡΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ Π΅Π³ΠΎ цСнности,
ΠΈ ΠΎΠ½ Π½Π΅ Π²Ρ‹Π΄Π΅Ρ€ΠΆΠ°Π» ΠΊΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ†ΠΈΠΈ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ языками программирования (ΠΏΡ€Π΅ΠΆΠ΄Π΅ всСго, с Π€ΠΎΡ€Ρ‚Ρ€Π°Π½ΠΎΠΌ).
ΠŸΡ€ΠΎΡ…Π»Π°Π΄Π½ΠΎΠΌΡƒ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡŽ ΠΊ языку способствовала ΠΈ Π΅Π³ΠΎ вСсьма нСэффСктивная рСализация (Π² Ρ‚.Ρ‡. ΠΈΠ·-Π·Π° сборки мусора).

Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, этот язык Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ использовался Π² ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΌ процСссС Π² Π²Ρ‹ΡΡˆΠΈΡ… ΡƒΡ‡Π΅Π±Π½Ρ‹Ρ… завСдСниях, особСнно Π² Π‘ΠΊΠ°Π½Π΄ΠΈΠ½Π°Π²ΠΈΠΈ.

Π‘ΠΎΠ»Π΅Π΅ всСго Π² Simula 67 ΠΏΠΎΡ€Π°ΠΆΠ°Π΅Ρ‚ сходство с соврСмСнными языками: ΠΏΠΎΠΆΠ°Π»ΡƒΠΉ, СдинствСнными сущСствСнными ΠΏΡ€ΠΎΠ±Π΅Π»Π°ΠΌΠΈ ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с Java
ΡΠ²Π»ΡΡŽΡ‚ΡΡ отсутствиС интСрфСйсов ΠΈ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈΠΌΠ΅Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ конструктора.


  • Π‘ΠΈΠΌΡƒΠ»Π° Π² Π’ΠΈΠΊΠΈΠΏΠ΅Π΄ΠΈΠΈ.

Π―Π·Ρ‹ΠΊ абстрактных Π΄Π°Π½Π½Ρ‹Ρ… ΠšΠ»Ρƒ (Clu) — 1974 Π³.


ΠšΠ»Ρƒ (Clu, CLU) β€” ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ [?!] язык программирования, ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· ΠΏΠ΅Ρ€Π²Ρ‹Ρ…
Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π²ΡˆΠΈΠΉ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΡŽ абстрактных Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΡƒ ΠΎΠ±ΠΎΠ±Ρ‰Ρ‘Π½Π½ΠΎΠ³ΠΎ программирования.
Π‘ΠΎΠ·Π΄Π°Π½ Π³Ρ€ΡƒΠΏΠΏΠΎΠΉ ΡƒΡ‡Ρ‘Π½Ρ‹Ρ… ΠœΠ°ΡΡΠ°Ρ‡ΡƒΡΠ΅Ρ‚ΡΠΊΠΎΠ³ΠΎ тСхнологичСского института ΠΏΠΎΠ΄ руководством Π‘Π°Ρ€Π±Π°Ρ€Ρ‹ Лисков Π² 1974 Π³ΠΎΠ΄Ρƒ.
Π―Π·Ρ‹ΠΊ ΡˆΠΈΡ€ΠΎΠΊΠΎΠ³ΠΎ примСнСния Π½Π΅ Π½Π°ΡˆΡ‘Π», ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ конструкции ΠΈ Π½Π°Ρ…ΠΎΠ΄ΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹ ΠΏΡ€ΠΈ создании Ρ‚Π°ΠΊΠΈΡ… языков
как Ада, C++, Java, Sather, Python, C#.

  • ΠšΠ»Ρƒ — ВикипСдия

SmallTalk (Бмо́лток) — 1980 Π³.


Smalltalk (Бмо́лток) β€” ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ язык программирования с динамичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΉ
Π² Xerox PARC Аланом КэйСм, Дэном Ингаллсом, Π’Π΅Π΄ΠΎΠΌ ΠšΡΠ³Π»Π΅Ρ€ΠΎΠΌ, АдСль Π“ΠΎΠ»Π΄Π±Π΅Ρ€Π³ ΠΈ Π΄Ρ€. Π² 1970-Ρ… Π³ΠΎΠ΄Π°Ρ….
Π―Π·Ρ‹ΠΊ Π±Ρ‹Π» прСдставлСн ΠΊΠ°ΠΊ Smalltalk-80.
Smalltalk ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ Ρ€Π°Π·Π²ΠΈΠ²Π°Ρ‚ΡŒΡΡ ΠΈ собираСт Π²ΠΎΠΊΡ€ΡƒΠ³ сСбя сообщСство ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ.


Smalltalk ΠΎΠΊΠ°Π·Π°Π» большоС влияниС Π½Π° Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅ ΠΌΠ½ΠΎΠ³ΠΈΡ… Π΄Ρ€ΡƒΠ³ΠΈΡ… языков, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ: Objective-C, Actor, Java, Erlang, Groovy ΠΈ Ruby.

МногиС ΠΈΠ΄Π΅ΠΈ 1980-Ρ… ΠΈ 1990-Ρ… ΠΏΠΎ написанию ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ появились Π² сообщСствС Smalltalk.
К Π½ΠΈΠΌ ΠΌΠΎΠΆΠ½ΠΎ отнСсти Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³, ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ проСктирования (ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΊ ПО), ΠΊΠ°Ρ€Ρ‚Ρ‹ «класс β€” обязанности β€” взаимодСйствиС»
ΠΈ ΡΠΊΡΡ‚Ρ€Π΅ΠΌΠ°Π»ΡŒΠ½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π² Ρ†Π΅Π»ΠΎΠΌ.

ΠžΡΠ½ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ Wiki Π£ΠΎΡ€Π΄ КаннингСм Ρ‚Π°ΠΊΠΆΠ΅ Π²Ρ…ΠΎΠ΄ΠΈΡ‚ Π² сообщСство Smalltalk.

  • SmallTalk Π² Π’ΠΈΠΊΠΈΠΏΠ΅Π΄ΠΈΠΈ.

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ язык систСмного программирования C++ («Π‘ΠΈ с классами») — 1980-Π΅ Π³.Π³.


А ΠΏΠΎΡ‡Π΅ΠΌΡƒ Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Π‘++ вмСсто языка программирования? (ΠΈΠ· Π‘Π°ΡˆΠΎΡ€Π³Π°)



Π―Π·Ρ‹ΠΊ C++ появился Π² Π½Π°Ρ‡Π°Π»Π΅ 80-Ρ… Π³ΠΎΠ΄ΠΎΠ². Π‘ΠΎΠ·Π΄Π°Π½Π½Ρ‹ΠΉ Π‘ΡŒΠ΅Ρ€Π½ΠΎΠΌ Бтрауструпом с ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΉ Ρ†Π΅Π»ΡŒΡŽ
ΠΈΠ·Π±Π°Π²ΠΈΡ‚ΡŒ сСбя ΠΈ своих Π΄Ρ€ΡƒΠ·Π΅ΠΉ ΠΎΡ‚ программирования Π½Π° ассСмблСрС, Π‘ΠΈ ΠΈΠ»ΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π΄Ρ€ΡƒΠ³ΠΈΡ… языках высокого уровня.
По мнСнию Π°Π²Ρ‚ΠΎΡ€Π° языка, Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΈΠ΄Π΅ΠΎΠ»ΠΎΠ³ΠΈΠ΅ΠΉ Π‘ΠΈ ΠΈ Π‘ΠΈ ++ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ:
ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π° C ΠΎΡ‚Ρ€Π°ΠΆΠ°Π΅Ρ‚ β€œΡΠΏΠΎΡΠΎΠ± ΠΌΡ‹ΡˆΠ»Π΅Π½ΠΈΡβ€ процСссора, Π° C++ — способ ΠΌΡ‹ΡˆΠ»Π΅Π½ΠΈΡ программиста.

Π―Π·Ρ‹ΠΊ Π‘++ объСдинил Π² сСбС Ρ‡Π΅Ρ€Ρ‚Ρ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΈ систСмного программирования.


ΠžΡ‚Π²Π΅Ρ‡Π°Ρ трСбованиям соврСмСнного программирования, C++ Π΄Π΅Π»Π°Π΅Ρ‚ Π°ΠΊΡ†Π΅Π½Ρ‚ Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Π½ΠΎΠ²Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…
Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ»Π½ΠΎ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… концСпциям Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠΉ области Π·Π½Π°Π½ΠΈΠΉ ΠΈ Π·Π°Π΄Π°Ρ‡Π°ΠΌ прилоТСния.
Класс являСтся ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌ понятиСм C++.
ОписаниС класса содСрТит описаниС Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰ΠΈΡ…ΡΡ для прСдставлСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² этого Ρ‚ΠΈΠΏΠ° ΠΈ Π½Π°Π±ΠΎΡ€ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΌΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ.


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




Π―Π·Ρ‹ΠΊ ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Π½ΠΎΠ³ΠΎ программирования Eifel


Π­ΠΉΡ„Π΅Π»ΡŒ (Eiffel) β€” ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ язык программирования с Π°Π»Π³ΠΎΠ»ΠΎΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΌ синтаксисом
(Π½ΠΎ Π±Π΅Π· использования сСпаратора) ΠΈ ΡΠΈΠ»ΡŒΠ½Ρ‹ΠΌ влияниСм Π‘ΠΈΠΌΡƒΠ»Ρ‹ (Simula).
Он Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½ ΠΏΡ€Π΅Π·ΠΈΠ΄Π΅Π½Ρ‚ΠΎΠΌ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Interactive Software Engineering (ISE) Π‘Π΅Ρ€Ρ‚Ρ€Π°Π½ΠΎΠΌ ΠœΠ΅ΠΉΠ΅Ρ€ΠΎΠΌ Π² 1987 Π³ΠΎΠ΄Ρƒ.

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


Eiffel ΠΈΠΌΠ΅Π΅Ρ‚ нСсколько Π²Π°ΠΆΠ½Ρ‹Ρ… Ρ‡Π΅Ρ€Ρ‚, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΡ… Π±ΠΎΠ»Π΅Π΅ ТСсткий ΡΡ‚ΠΈΠ»ΡŒ программирования, Π² Ρ‚ΠΎΠΌ числС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Π΅ классы, утвСрТдСния ΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ.
ΠΠ΅ΠΎΡ‚ΡŠΠ΅ΠΌΠ»Π΅ΠΌΠΎΠΉ Ρ‡Π°ΡΡ‚ΡŒΡŽ языка ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΏΡ€Π΅Π΄- ΠΈ постусловия — утвСрТдСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ ΠΏΡ€ΠΈ Π²Ρ…ΠΎΠ΄Π΅ Π² ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π΅ ΠΈΠ· Π½Π΅Π³ΠΎ.
ΠΠ°Ρ€ΡƒΡˆΠ΅Π½ΠΈΠ΅ утвСрТдСния Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚ΠΈΡ‚ΡŒ, ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΈ ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π΅Ρ‰Π΅ Ρ€Π°Π·.
ΠŸΡ€Π΅Π΄ΡƒΡΠ»ΠΎΠ²ΠΈΡ, постусловия ΠΈ ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Β«ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Π°ΠΌΠΈΒ».

Π•Π³ΠΎ ΠΏΡ€ΠΈΠ²Π΅Ρ€ΠΆΠ΅Π½Ρ†Ρ‹ ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚ Eiffel Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ»Π½Ρ‹ΠΌ, Π½Π°Π΄Π΅ΠΆΠ½Ρ‹ΠΌ, ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΈ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΌ языком программирования, Ρ‡Π΅ΠΌ Java.

  • Π­ΠΉΡ„Π΅Π»ΡŒ (язык программирования) ΠœΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» ΠΈΠ· Π’ΠΈΠΊΠΈΠΏΠ΅Π΄ΠΈΠΈ β€” свободной энциклопСдии.
  • Π―Π·Ρ‹ΠΊ программирования Eiffel (Π­ΠΉΡ„Π΅Π»ΡŒ).





























ΠšΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ слова для поиска свСдСний ΠΎ ΠΏΠΈΠΎΠ½Π΅Ρ€Π°Ρ… ООП:



На русском языкС: ΠΏΠΈΠΎΠ½Π΅Ρ€Ρ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ программирования, ΠΏΠ΅Ρ€Π²Ρ‹Π΅ языки ООП;





На английском языкС: OOP, Π‘++, Simula, Smalltalk.






ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ языки β€” Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ°, ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ

Π’ основС Π»Π΅ΠΆΠΈΡ‚ концСпция, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡŽΡ‚ΡΡ Π² классы, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌΡ‹Π΅ Π² исходном ΠΊΠΎΠ΄Π΅ Π² Π²ΠΈΠ΄Π΅ мноТСства нСзависимых ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π²Π΅Π΄Π΅Ρ‚ сСбя ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΌΡƒ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Ρƒ; ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π·Π°Π΄Π°Ρ‡ ΠΊΠ°ΠΊ Β«Ρ‡Π΅Ρ€Π½Ρ‹Π΅ ящики», Π½Π΅ вникая Π²ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ ΠΈΡ… функционирования. ИмСнно ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π³Π»Π°Π²Π½Ρ‹ΠΌΠΈ элСмСнтами ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ ΠΏΡ€ΠΈ использовании Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°. ЀактичСски ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, ΠΊΠΎΠ³Π΄Π° вмСсто мСханичСского объСдинСния ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π°ΠΊΡ†Π΅Π½Ρ‚ дСлаСтся Π½Π° ΠΈΡ… связанноС взаимодСйствиС Π² Ρ€Π°ΠΌΠΊΠ°Ρ… Π΅Π΄ΠΈΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π·Π°ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ Π² сСбС ΠΏΠΎΠ»Π½ΠΎΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ своих характСристик; Π½ΠΈΠΊΠ°ΠΊΠΈΠ΅ опрСдСлСния ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΈ свойств Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒΡΡ Π²Π½Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Π­Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌ свободноС ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π² Π΄Ρ€ΡƒΠ³ΠΈΠ΅.

ΠžΡΠ½ΠΎΠ²Π½Ρ‹ΠΌΠΈ понятиями языков ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ программирования ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, класс ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄.

β€’ ΠžΠ±ΡŠΠ΅ΠΊΡ‚ – это структура Π΄Π°Π½Π½Ρ‹Ρ…, содСрТащая поля Π΄Π°Π½Π½Ρ‹Ρ… (ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ записи) Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² ΠΈ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ². ΠŸΠΎΠ½ΡΡ‚ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ ΠΊΠ°ΠΊ ΡΠΎΠ²ΠΎΠΊΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ свойств (структур Π΄Π°Π½Π½Ρ‹Ρ…, Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€Π½Ρ‹Ρ… для Π½Π΅Π³ΠΎ), ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΈΡ… ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ (ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ измСнСния ΠΈΡ… свойств) ΠΈ событий, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π΅Π°Π³ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, ΠΈ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ приводят, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, ΠΊ измСнСнию свойств ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.

β€’ Класс – это шаблон, Π½Π° основС ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ создан ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. Он описываСт свойства ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΠΈΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² этого класса. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΉ структуру Π΄Π°Π½Π½ΠΎΠ³ΠΎ класса, называСтся экзСмпляром этого класса.

β€’ ΠœΠ΅Ρ‚ΠΎΠ΄ – это ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° ΠΈΠ»ΠΈ функция, объявлСнная Π²Π½ΡƒΡ‚Ρ€ΠΈ объявлСния элСмСнта Ρ‚ΠΈΠΏΠ° Β«ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Β».

Π€ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ°ΠΌΠΈ ООП (ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ программирования) ΡΠ²Π»ΡΡŽΡ‚ΡΡ инкапсуляция, наслСдованиС ΠΈ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ.

β€’ Π˜Π½ΠΊΠ°ΠΏΡΡƒΠ»ΡΡ†ΠΈΡ – это объСдинСниС Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ свойствСнных ΠΈΠΌ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅.

β€’ НаслСдованиС прСдусматриваСт созданиС Π½ΠΎΠ²Ρ‹Ρ… классов Π½Π° Π±Π°Π·Π΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΈ позволяСт классу-Β«ΠΏΠΎΡ‚ΠΎΠΌΠΊΡƒΒ» ΠΈΠΌΠ΅Ρ‚ΡŒ (Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ) всС свойства класса-«родитСля».

β€’ ΠŸΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΏΠΎΡ€ΠΎΠΆΠ΄Π΅Π½Π½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΎΠ±Π»Π°Π΄Π°ΡŽΡ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΎΠ½ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² зависимости ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, Π² ΠΊΠ°ΠΊΠΎΠΌ мСстС Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΈ ΠΎΠ½ΠΈ находятся.

ΠŸΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π±ΠΎΠ»Π΅Π΅ СстСствСнСн, Ρ‡Π΅ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ»ΠΎΠ³ΠΈΠΈ, ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Π½Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ (процСсс), ΠΈΠ·-Π·Π° возмоТности ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² процСссС программирования Ρ€Π°Π·Π½ΠΎΠΎΠ±Ρ€Π°Π·Π½Ρ‹Π΅ Π²ΠΈΠ΄Ρ‹ абстракции Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‡Ρ‚ΠΎ позволяСт ΡΠΊΠΎΠ½Ρ†Π΅Π½Ρ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ систСмы, Π½Π΅ бСспокоясь ΠΎ дСталях ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… Π² Π½Π΅ΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ².

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ шаги Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, прСдусмотрСнныС Π΄Π°Π½Π½ΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ»ΠΎΠ³ΠΈΠ΅ΠΉ:

β€’ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹;

β€’ Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅ Π½Π΅Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠΉ стратСгии, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π΅ΠΉ ΠΎΠ±Ρ‰ΡƒΡŽ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ шагов ΠΈ ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΡΡŽΡ‰Π΅ΠΉ трСбованиям ΠΊ Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅;

β€’ формализация стратСгии;

β€’ идСнтификация ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ ΠΈΡ… Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ²;

β€’ идСнтификация ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ;

β€’ установка интСрфСйсов;

β€’ рСализация ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ.

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ язык программирования Simula 67 Π±Ρ‹Π» Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½ Π² 1967 Π³. Π² НорвСгии. ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ прСдставитСли Π² нашС врСмя:

C++

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½ датским программистом, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠΌ Π² БША, Π‘ΡŒΡΡ€Π½ΠΎΠΌ Бтрауструпом Π² 1983 Π³. Π½Π° основС классичСского языка C, появившСгося ΠΎΠ΄ΠΈΠ½Π½Π°Π΄Ρ†Π°Ρ‚ΡŒΡŽ Π³ΠΎΠ΄Π°ΠΌΠΈ Ρ€Π°Π½Π΅Π΅. Π¨ΠΈΡ€ΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… областях, обСспСчивая Ρ…ΠΎΡ€ΠΎΡˆΠ΅Π΅ сочСтаниС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈ простоты использования.

Visual Basic

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΉ Π² 1991 Π³. ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ простых языков программирования.

Delphi

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΉ Π² 1995 Π³. ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠ΅ΠΉ Borland ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ языка программирования Pascal.

Java

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½ ΠΊΠΎΡ€ΠΏΠΎΡ€Π°Ρ†ΠΈΠ΅ΠΉ Sun Π² 1995 Π³. ΠŸΠΎΡ‚ΠΎΠΌΠΎΠΊ C++; основным Π΅Π³ΠΎ прСимущСством считаСтся ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠΎ-Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ, Ρ‚.Π΅. прилоТСния, написанныС Π½Π° Java, ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π½Π° Π»ΡŽΠ±Ρ‹Ρ… ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°Ρ…, нСзависимо ΠΎΡ‚ ΠΈΡ… Ρ‚ΠΈΠΏΠ° ΠΈ установлСнной ОБ. Java стал стандартным языком программирования Internet, β€” ΠΈΠΌΠ΅Π½Π½ΠΎ Π½Π° Π½Π΅ΠΌ ΠΏΠΈΡˆΡƒΡ‚ΡΡ малСнькиС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Π΅ дополнСния ΠΊ Web-прилоТСниям – Π°ΠΏΠΏΠ»Π΅Ρ‚Ρ‹.

C#

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½ Π² 2000 Π³., являСтся ΡƒΠ΄Π°Ρ‡Π½Ρ‹ΠΌ сочСтаниСм C++ ΠΈ Java, ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ Web-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.

Π’ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ программирования умСстно Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ Π½Π΅ просто ΠΎ языках ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ систСмах программирования, Π° ΠΎΠ± ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… срСдах Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΠ»ΠΈ систСмах Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ проСктирования, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… интСрфСйсная Ρ‡Π°ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π° создаСтся Π² Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅, практичСски Π±Π΅Π· написания ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ². ОБ Ms Windows Π·Π° ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π³ΠΎΠ΄Ρ‹ установила стандарт графичСской ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ GUI – Graphic User Interface, ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‰Π΅ΠΉ срСду для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΈ программиста. ВсС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π² Windows базируСтся Π½Π° использовании Π½Π°Π±ΠΎΡ€Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ интСрфСйса ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½ΠΎΠ³ΠΎ программирования Win32 API, ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ сконструированного для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ языками программирования. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° Win32 API поддСрТиваСтся любой ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ срСдой Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ПО.

ΠŸΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… языков программирования ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ Drag and Drop («пСрСнСси ΠΈ Π±Ρ€ΠΎΡΡŒΒ») ΡƒΠΏΡ€ΠΎΡ‰Π°ΡŽΡ‚ созданиС интСрфСйсов ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. Π’Π°ΠΊΠΈΠ΅ систСмы ΠΈΠΌΠ΅ΡŽΡ‚ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ RAD (Rapid Application Development – быстрая срСда Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ). Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ позволяСт ΡƒΠ΄Π΅Π»ΠΈΡ‚ΡŒ большС Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ Π»ΠΎΠ³ΠΈΠΊΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π° Π½Π΅ Π½Π° созданиС интСрфСйса Π±ΡƒΠ΄ΡƒΡ‰Π΅Π³ΠΎ прилоТСния. КаТдая срСда Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΠ³Ρ€ΠΎΠΌΠ½Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ встроСнных ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Ρ… элСмСнтами управлСния ΠΈΠ»ΠΈ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π°ΠΌΠΈ.

К Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ извСстным инструмСнтам Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ программирования относятся срСды Delphi ΠΈ C++ Builder ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Borland (Π² ΠΏΡ€ΠΎΡˆΠ»ΠΎΠΌ Inprise) ΠΈ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Ρ‹ сСмСйства Visual Studio ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Microsoft. ΠŸΠ΅Ρ€Π²Π°Ρ вСрсия Visual Studio Π²Ρ‹ΡˆΠ»Π° Π² свСт Π² 1997 Π³., Π° вСрсия Visual Studio 6.0 Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя Visual Basic (VB), Visual C++, Visual FoxPro, Visual InterDev, Visual J++, Visual SourseSafe ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ MSDN. Microsoft Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π»Π° свою ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π½ΡƒΡŽ модСль MFC (Microsoft Foundation Class Library – Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° основных классов ΠΎΡ‚ Microsoft), ΡΠ²Π»ΡΡŽΡ‰ΡƒΡŽΡΡ прямым ΠΊΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ‚ΠΎΠΌ ΠΌΠΎΠ΄Π΅Π»ΠΈ VCL (Visual Component Library – Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚), ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΉ Π² Delphi ΠΈ C++ Builder. Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° VCL ΠΈΠΌΠ΅Π΅Ρ‚ Π±ΠΎΠ³Π°Ρ‚Ρ‹ΠΉ Π²Ρ‹Π±ΠΎΡ€ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»Π°, Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° MFC отличаСтся ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ ΠΈ быстродСйствиСм. Π’ настоящСС врСмя Visual Studio расцСниваСтся ΠΊΠ°ΠΊ ΠΏΠΎΠ»Π½ΠΎΡ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΎΠ² для проСктирования Π² срСдС Windows, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ с успСхом ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΊΠ°ΠΊ Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Ρ… клиСнтских ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Ρ‚Π°ΠΊ ΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ для Internet.

Π’ ΠΊΠΎΠ½Ρ†Π΅ 2001 Π³. Microsoft анонсировал Π½ΠΎΠ²ΡƒΡŽ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡƒ для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ПО β€” .NET, ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ Π½Π° Web-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. Для этой ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ Π±Ρ‹Π»Π° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ создана новая спСцификация языка программирования C#, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ свойствСнны ΠΌΠΎΠ΄Π½ΠΎΠ΅ Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅, Ρ…ΠΎΡ€ΠΎΡˆΠΈΠ΅ возмоТности ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΡ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ.

Π‘Ρ‚Π°Ρ‚ΡŒΠΈ ΠΊ ΠΏΡ€ΠΎΡ‡Ρ‚Π΅Π½ΠΈΡŽ:

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ программирования. Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ООП ΠΈ Π·Π°Ρ‡Π΅ΠΌ ΠΎΠ½ΠΎ Π½ΡƒΠΆΠ½ΠΎ?

ΠŸΠΎΡ…ΠΎΠΆΠΈΠ΅ ΡΡ‚Π°Ρ‚ΡŒΠΈ:

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ язык программирования — это… Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ язык программирования?

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ язык программирования (ОО-язык)Β β€” язык, построСнный Π½Π° ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ°Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ программирования.

Π’ основС ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ программирования Π»Π΅ΠΆΠΈΡ‚ понятиС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°Β β€” Π½Π΅ΠΊΠΎΠΉ субстанции, которая ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ‚ Π² сСбС поля (Π΄Π°Π½Π½Ρ‹Π΅) ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ (выполняСмыС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ дСйствия).

НапримСр, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ поля имя, фамилия ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π΅ΡΡ‚ΡŒ ΠΈ ΡΠΏΠ°Ρ‚ΡŒ. БоотвСтствСнно, Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ Π§Π΅Π»ΠΎΠ²Π΅ΠΊ.Имя:="Иван" ΠΈ Π§Π΅Π»ΠΎΠ²Π΅ΠΊ.Π•ΡΡ‚ΡŒ(ΠΏΠΈΡ‰Π°).

ΠžΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΠΈ , Ulan

Π’ соврСмСнных ОО языках ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹:

  • НаслСдованиС. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ класса ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΏΡƒΡ‚Ρ‘ΠΌ добавлСния Π½ΠΎΠ²Ρ‹Ρ… элСмСнтов (ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²). НСкоторыС ОО языки ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ мноТСствСнноС наслСдованиС, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡ‚ΡŒ Π² ΠΎΠ΄Π½ΠΎΠΌ классС возмоТности Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π΄Ρ€ΡƒΠ³ΠΈΡ… классов.
  • Π˜Π½ΠΊΠ°ΠΏΡΡƒΠ»ΡΡ†ΠΈΡ. Π‘ΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Π΄Π΅Ρ‚Π°Π»Π΅ΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ позволяСт Π²Π½ΠΎΡΠΈΡ‚ΡŒ измСнСния Π² части ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π±Π΅Π·Π±ΠΎΠ»Π΅Π·Π½Π΅Π½Π½ΠΎ для Π΄Ρ€ΡƒΠ³ΠΈΡ… Π΅Ρ‘ частСй, Ρ‡Ρ‚ΠΎ сущСствСнно ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ сопровоТдСниС ΠΈ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ ПО.
  • ΠŸΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ. ΠŸΡ€ΠΈ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌΠ΅ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ части (ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹) Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ класса Π·Π°ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ Π½ΠΎΠ²Ρ‹ΠΌΠΈ, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠΌΠΈ спСцифичСскиС для Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ° дСйствия. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, интСрфСйс классов остаётся ΠΏΡ€Π΅ΠΆΠ½ΠΈΠΌ, Π° рСализация ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² с ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ ΠΈ Π½Π°Π±ΠΎΡ€ΠΎΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² различаСтся. Π‘ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌΠΎΠΌ тСсно связано ΠΏΠΎΠ·Π΄Π½Π΅Π΅ связываниС.

Бписок языков

НСполный список ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… языков программирования:

ΠšΡ€ΠΎΠΌΠ΅ ОО-языков ΠΎΠ±Ρ‰Π΅Π³ΠΎ назначСния ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΈ узкоспСциализированныС ОО-языки.

Π›ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Π°

  • Иан ГрэхСм. ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹. ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ ΠΈ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° = Object-Oriented Methods: Principles & Practice.Β β€” 3-Π΅ ΠΈΠ·Π΄.Β β€” М.: Π’ΠΈΠ»ΡŒΡΠΌΡ, 2004.Β β€” 880 с.Β β€” ISBN 0-201-61913-X
  • Антони БинтСс. Освой ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π·Π° 21 дСнь = Sams Teach Yourself Object-Oriented Programming in 21 Days.Β β€” М.: Π’ΠΈΠ»ΡŒΡΠΌΡ, 2002.Β β€” 672 с.Β β€” ISBN 0-672-32109-12
  • Π“Ρ€Π°Π΄ΠΈ Π‘ΡƒΡ‡. ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π°Π½Π°Π»ΠΈΠ· ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ с ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° Π‘++.Β β€” Π‘ΠΈΠ½ΠΎΠΌ, 1998.Β β€” ISBN 0-8053-5340-2, ISBN 5-7989-0067-3, ISBN 5-7940-0017-1
  • ΠŸΠ΅Ρ‚Π΅Ρ€ ΠšΠΎΡƒΠ΄ (Дэвид Норт, ΠœΠ°Ρ€ΠΊ ΠœΡΠΉΡ„ΠΈΠ»Π΄). ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Π΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ. Π‘Ρ‚Ρ€Π°Ρ‚Π΅Π³ΠΈΠΈ, ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ ΠΈ прилоТСния.

Бсылки

ΠšΠΎΡ€ΠΎΡ‚ΠΊΠΎ ΠΎΠ± истории ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ программирования

ЯвляСтся Π»ΠΈ Go языком ООП? / Π₯Π°Π±Ρ€

Object-oriented design is the roman numerals of computing.

β€” Rob Pike, Π°Π²Ρ‚ΠΎΡ€ Go.

ΠŸΡ€Π΅Π΄Π»Π°Π³Π°ΡŽ Π²Π°ΡˆΠ΅ΠΌΡƒ вниманию Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ Π·Π°ΠΌΠ΅Ρ‚ΠΊΠΈ Β«Is Go An Object Oriented Language?Β» Π·Π° авторством Steve Francia, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π°Π²Ρ‚ΠΎΡ€ наглядно рассказываСт ΠΎΠ± особСнностях использования ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΡ‹ ООП Π² Go. Π‘Ρ€Π°Π·Ρƒ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π°ΡŽ, Ρ‡Ρ‚ΠΎ ΠΈΠ·-Π·Π° свойств ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π° Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ тСкста ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ ΠΏΠ΅Ρ€Π΅Ρ„ΠΎΡ€ΠΌΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ, Π³Π΄Π΅-Ρ‚ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ своСго. Π€Π»Π°ΠΆΠΎΠΊ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° ΡƒΠ±ΠΈΡ€Π°Ρ‚ΡŒ Π½Π΅ стал.

1. Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΆΠ΅ это Π·Π½Π°Ρ‡ΠΈΡ‚, Π±Ρ‹Ρ‚ΡŒ Β«ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΒ»? ΠžΠ±Ρ€Π°Ρ‚ΠΈΠΌΡΡ ΠΊ истории возникновСния ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ‚Π° ООП, ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ.
ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ язык, Simula, появился Π½Π° Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π΅ Π² 60-x Π³ΠΎΠ΄Π°Ρ…. Он привнёс понятия ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², классов, понятия наслСдования ΠΈ классов-ΠΏΠΎΡ‚ΠΎΠΌΠΊΠΎΠ², Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², сопрограмм ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠ΅ Π΄Ρ€ΡƒΠ³ΠΎΠ΅. ΠŸΠΎΡ…ΠΎΠ΄Ρƒ, самым Ρ†Π΅Π½Π½Ρ‹ΠΌ Π²ΠΊΠ»Π°Π΄ΠΎΠΌ стала ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΠ° абстракции Π΄Π°Π½Π½Ρ‹Ρ….

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ Π·Π½Π°ΠΊΠΎΠΌΡ‹ со Simula, Π½ΠΎ, Π²Π½Π΅ всяких сомнСний, Ρ‚ΠΎΡ‡Π½ΠΎ Π·Π½Π°Π΅Ρ‚Π΅ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· Ρ‚Π΅Ρ… языков, для ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΠ½ стал Π²Π΄ΠΎΡ…Π½ΠΎΠ²Π΅Π½ΠΈΠ΅ΠΌ β€” Java, C++, C# ΠΈ Smalltalk, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ·ΠΆΠ΅, Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, сильно повлияли Π½Π° Objective-C, Python, Ruby, Javascript, Scala, PHP, Perl… ΠΏΠΎΠ»Π½Ρ‹ΠΉ ΠΏΠ΅Ρ€Π΅Ρ‡Π΅Π½ΡŒ содСрТит ΠΏΠΎΡ‡Ρ‚ΠΈ всС популярныС соврСмСнныС языки. Π­Ρ‚Π° ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΠ° Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΎΡ‡Π½ΠΎ вошла Π² Π½Π°ΡˆΡƒ Тизнь, Ρ‡Ρ‚ΠΎ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ соврСмСнных программистов Π½ΠΈΠΊΠΎΠ³Π΄Π° ΠΈ Π½Π΅ Π΄ΡƒΠΌΠ°Π»ΠΈ ΠΈΠ½Π°Ρ‡Π΅.

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ общСпринятого опрСдСлСния ООП Π½Π΅ сущСствуСт, для продолТСния дискуссии ΠΌΡ‹ сформулируСм своё.

ВмСсто явного раздСлСния ΠΊΠΎΠ΄Π° ΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Π² тСкстС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ориСнтированная систСма ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ‚ ΠΈΡ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΡŽ Β«ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°Β». ΠžΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ называСтся абстрактный Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ…, Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰ΠΈΠΉ состояниС (Π΄Π°Π½Π½Ρ‹Π΅) ΠΈ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ (ΠΊΠΎΠ΄).

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½Π°Ρ рСализация ΠΈΠΌΠ΅Π»Π° ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ наслСдования ΠΈ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌΠ°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ пСрСняты практичСски Π²ΠΎ всСх ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹Ρ… языках, опрСдСлСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ программирования ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ ΠΈΡ… ΠΊΠ°ΠΊ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ΅ условиС.

Π”Π°Π»Π΅Π΅ ΠΌΡ‹ рассмотрим, ΠΊΠ°ΠΊ Π² Go ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ ΠΈ наслСдованиС, послС Ρ‡Π΅Π³ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΡ‰Π΅ ΠΎΡ‚Π²Π΅Ρ‚ΠΈΡ‚ΡŒ Π½Π° поставлСнный вопрос.

2. ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹?

Π’ Go Π½Π΅Ρ‚ Π½ΠΈΡ‡Π΅Π³ΠΎ с ΠΈΠΌΠ΅Π½Π΅ΠΌ object, хотя это ΠΈ Π½Π΅ Π²Π°ΠΆΠ½ΠΎ. ΠŸΡƒΡΡ‚ΡŒ Ρ‚ΠΈΠΏ object Π½Π΅ встрСчаСтся, Π·Π°Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Ρ‚ΠΈΠΏ, ΠΏΠΎΠΏΠ°Π΄Π°ΡŽΡ‰ΠΈΠΉ ΠΏΠΎΠ΄ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° β€” структуры Π΄Π°Π½Π½Ρ‹Ρ…, Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰ΠΈΠ΅ ΠΈ состояниС ΠΈ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅, ΠΎΠ½ΠΈ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ struct. struct это Ρ‚ΠΈΠΏ, содСрТащий ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Π΅ поля ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹.

Для наглядности ΠΏΡ€ΠΈΠ²Π΅Π΄Ρƒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

type rect struct {
    width int
    height int
}

func (r *rect) area() int {
    return r.width * r.height
}

func main() {
    r := rect{width: 10, height: 5}
    fmt.Println("area: ", r.area())
}

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ Π±Π»ΠΎΠΊ опрСдСляСт Π½ΠΎΠ²Ρ‹ΠΉ Ρ‚ΠΈΠΏ rect структурного Ρ‚ΠΈΠΏΠ°, содСрТащСго 2 цСлочислСнных поля. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π±Π»ΠΎΠΊ опрСдСляСт ΠΌΠ΅Ρ‚ΠΎΠ΄ Π½Π° этой структурС ΠΏΡƒΡ‚Ρ‘ΠΌ опрСдСлСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ area ΠΈ прикрСплСния Π΅Ρ‘ ΠΊ Ρ‚ΠΈΠΏΡƒ rect. Π’ΠΎΡ‡Π½Π΅Π΅, Π½Π° самом Π΄Π΅Π»Π΅ функция прикрСпляСтся ΠΊ Ρ‚ΠΈΠΏΡƒ-ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŽ Π½Π° rect.
ПослСдний Π±Π»ΠΎΠΊ являСтся Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ Π²Ρ…ΠΎΠ΄Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, это функция main. ΠŸΠ΅Ρ€Π²Π°Ρ строка создаёт Π½ΠΎΠ²Ρ‹ΠΉ экзСмпляр rect (Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹ΠΉ способ создания экзСмпляра β€” Ρ‡Π΅Ρ€Π΅Π· составной Π»ΠΈΡ‚Π΅Ρ€Π°Π» β€” являСтся Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΌ Π² Go). Вторая строчка ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° Π²Ρ‹Π²ΠΎΠ΄ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ area Π½Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΈ r.

Π›ΠΈΡ‡Π½ΠΎ ΠΌΠ½Π΅ это всё сильно Π½Π°ΠΏΠΎΠΌΠ½ΠΈΠ»ΠΎ Ρ€Π°Π±ΠΎΡ‚Ρƒ с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ. Π― ΠΌΠΎΠ³Ρƒ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏ структурированных Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΠΈΠ· Π½ΠΈΡ….

Π§Π΅Π³ΠΎ-Ρ‚ΠΎ Π΅Ρ‰Ρ‘ Π½Π΅ Ρ…Π²Π°Ρ‚Π°Π΅Ρ‚? Π”Π°, Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… языков для описания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ классы с ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ наслСдования, ΠΏΡ€ΠΈΡ‡Ρ‘ΠΌ Ρ…ΠΎΡ€ΠΎΡˆΠ΅ΠΉ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΎΠΉ считаСтся ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ интСрфСйсов для этих классов ΠΈ Ρ‚Π΅ΠΌ самым ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π΄Π΅Ρ€Π΅Π²Π° ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ классов (Π² случаС простого наслСдования).

2. НаслСдованиС ΠΈ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ

БущСствуСт нСсколько Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠ² ΠΊ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡŽ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΉ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ. И хотя ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ различия, всС ΠΎΠ½ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ практичСски с ΠΎΠ΄Π½ΠΎΠΉ Ρ†Π΅Π»ΡŒΡŽ β€” Ρ€Π°Π΄ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ использования ΠΊΠΎΠ΄Π°.

2.1. ΠŸΡ€ΠΎΡΡ‚ΠΎΠ΅ ΠΈ мноТСствСнноС наслСдованиС

НаслСдованиС это ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ языка, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ класс Π½Π° основС ΡƒΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ (Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ) класса. БущСствуСт Π΄Π²Π΅ разновидности наслСдования, Π½Π° основании количСства Π±Π°Π·ΠΎΠ²Ρ‹Ρ… классов. ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΈΠ°Π»ΡŒΠ½ΡƒΡŽ Ρ€Π°Π·Π½ΠΈΡ†Ρƒ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‰ΡƒΡ‚ΠΈΡ‚ΡŒ лишь оцСнивая послСдствия примСнСния мноТСствСнного наслСдования: иСрархия простого наслСдования (single inheritance) прСдставляСт собой Π΄Π΅Ρ€Π΅Π²ΠΎ, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ мноТСствСнноС наслСдованиС ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°Π΅Ρ‚ Ρ€Π΅ΡˆΡ‘Ρ‚ΠΊΡƒ. Π―Π·Ρ‹ΠΊΠΈ с ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ простого Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ PHP, C#, Java ΠΈ Ruby, Π° ΠΊ языкам с ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ мноТСствСнного наслСдования относятся Perl, Python ΠΈ C++.

2.2. ΠŸΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ ΠΏΠΎΠ΄Ρ‚ΠΈΠΏΠΎΠ²

Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… языках понятия ΠΏΠΎΠ΄Ρ‚ΠΈΠΏΠΎΠ² ΠΈ наслСдования Ρ‚Π°ΠΊ тСсно ΠΏΠ΅Ρ€Π΅ΠΏΠ»Π΅Ρ‚Π΅Π½Ρ‹, Ρ‡Ρ‚ΠΎ Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ Π΅Π΄Π²Π° Π·Π°ΠΌΠ΅Ρ‚Π½Π°. На самом Π΄Π΅Π»Π΅ ΠΏΠΎΠ΄Ρ‚ΠΈΠΏΡ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ сСмантичСскиС ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρƒ двумя ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ, Ρ‚Π΅ΠΌ самым образуя ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ is-a. Π’ΠΎ Π΅ΡΡ‚ΡŒ, Ρ‚ΠΈΠΏ A являСтся ΠΏΠΎΠ΄Ρ‚ΠΈΠΏΠΎΠΌ B Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° спСцификация A слСдуСт ΠΈΠ· спСцификации B ΠΈ любой ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΡΡŽΡ‰ΠΈΠΉ спСцификации A ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ (ΠΈΠ»ΠΈ класс) Ρ‚Π°ΠΊΠΆΠ΅ удовлСтворяСт спСцификации B. Π’ Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ простоС наслСдованиС Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ, Ρ‚Π΅ΠΌ самым обСспСчивая синтаксичСский сахар, Π½ΠΎ Π½Π΅ Π±ΠΎΠ»Π΅Π΅.

Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ Ρ‡Ρ‘Ρ‚ΠΊΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π°Ρ‚ΡŒ наслСдованиС Ρ‡Π΅Ρ€Π΅Π· Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΈ «наслСдованиС» Ρ‡Π΅Ρ€Π΅Π· ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ ΠΏΠΎΠ΄Ρ‚ΠΈΠΏΠΎΠ², Ρ‡Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ понятно ΠΈΠ· тСкста Π΄Π°Π»Π΅Π΅.

2.3. ΠšΠΎΠΌΠΏΠΎΠ·ΠΈΡ†ΠΈΡ

ΠŸΡ€ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ ΠΎΠ΄ΠΈΠ½ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ опрСдСляСтся ΠΏΡƒΡ‚Ρ‘ΠΌ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π² Π½Π΅Π³ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ вмСсто наслСдования ΠΎΠ½ просто содСрТит ΠΈΡ…. Π’Π°ΠΊΠΎΠΉ Ρ‚ΠΈΠΏ взаимосвязи называСтся has-a ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΏΠΎΠ΄Ρ‡ΠΈΠ½ΡΡŽΡ‚ΡΡ ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ принадлСТности.

3. Π•ΡΡ‚ΡŒ Π»ΠΈ Π² Go наслСдованиС?

Go ΠΏΠΎ Π·Π°Π΄ΡƒΠΌΠΊΠ΅ Π±Ρ‹Π» спроСктирован Π±Π΅Π· наслСдования Π² ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΌ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠΈ этого слова. ВовсС Π½Π΅ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ (структуры) Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΉ, просто Π°Π²Ρ‚ΠΎΡ€Ρ‹ языка Π²Ρ‹Π±Ρ€Π°Π»ΠΈ ΠΈΠ½ΠΎΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ обозначСния Ρ‚Π°ΠΊΠΎΠ²Ρ‹Ρ…. Для ΠΌΠ½ΠΎΠ³ΠΈΡ… Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ… ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½Π° Go это Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΡΠ΅Ρ€ΡŒΡ‘Π·Π½ΠΎΠΉ Π½Π΅Π΄ΠΎΡ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ, ΠΎΠ΄Π½Π°ΠΊΠΎ, Π² Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΆΠ΅, это ΠΎΠ΄Π½ΠΎ ΠΈΠ· самых приятных свойств языка ΠΈ ΠΎΠ½ΠΎ Ρ€Π΅ΡˆΠ°Π΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, Π·Π°ΠΎΠ΄Π½ΠΎ закрывая споры Π²ΠΎΠΊΡ€ΡƒΠ³ наслСдования β€” возраст ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… исчисляСтся дСсятками Π»Π΅Ρ‚ β€” Ρ€Π°Π· ΠΈ навсСгда.

4. Β«ΠŸΡ€ΠΎΡΡ‚ΠΎΠ΅ наслСдованиС Π»ΡƒΡ‡ΡˆΠ΅ Π²Ρ‹ΠΊΠΈΠ½ΡƒΡ‚ΡŒΒ»

Π”Π°Π»Π΅Π΅ я ΠΏΡ€ΠΈΠ²Π΅Π΄Ρƒ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ ΠΈΠ· ΡΡ‚Π°Ρ‚ΡŒΠΈ Π½Π° JavaWorld β€” Β«Why extends is evilΒ»:

Π’ ΠΊΠ½ΠΈΠ³Π΅ Π±Π°Π½Π΄Ρ‹ Ρ‡Π΅Ρ‚Ρ‹Ρ€Ρ‘Ρ… ΠΎ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π°Ρ… проСктирования Π΄Π΅Ρ‚Π°Π»ΡŒΠ½ΠΎ обсуТдаСтся Π·Π°ΠΌΠ΅Π½Π° наслСдования Ρ‡Π΅Ρ€Π΅Π· Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ (extends) Π½Π° наслСдованиС Ρ‡Π΅Ρ€Π΅Π· интСрфСйсы (implements).

Π― ΠΎΠ΄Π½Π°ΠΆΠ΄Ρ‹ посСтил сходку ΡŽΠ·Π΅Ρ€ Π³Ρ€ΡƒΠΏΠΏΡ‹ Java, ΠΊΡƒΠ΄Π° James Gosling (ΡΠΎΠ·Π΄Π°Ρ‚Π΅Π»ΡŒ Java) Π±Ρ‹Π» ΠΏΡ€ΠΈΠ³Π»Π°ΡˆΡ‘Π½ Π΄Π΅Π»Π°Ρ‚ΡŒ Π΄ΠΎΠΊΠ»Π°Π΄. Π’ΠΎ врСмя памятной сСссии вопросов ΠΈ ΠΎΡ‚Π²Π΅Ρ‚ΠΎΠ² ΠΊΡ‚ΠΎ-Ρ‚ΠΎ спросил Π΅Π³ΠΎ: «Если Π±Ρ‹ Π²Ρ‹ ΠΌΠΎΠ³Π»ΠΈ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Java Π·Π°Π½ΠΎΠ²ΠΎ, Ρ‡Ρ‚ΠΎ Π±Ρ‹ Π²Ρ‹ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΠΈ?Β». Β«Π― Π±Ρ‹ Π²Ρ‹ΠΊΠΈΠ½ΡƒΠ» классы», ΠΎΡ‚Π²Π΅Ρ‚ΠΈΠ» ΠΎΠ½. ПослС Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ смСх Π² Π·Π°Π»Π΅ ΡƒΡ‚ΠΈΡ…, ΠΎΠ½ объяснил, Ρ‡Ρ‚ΠΎ настоящая ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π½Π΅ Π² классах ΠΏΠΎ сути, Π° Π² наслСдовании Ρ‡Π΅Ρ€Π΅Π· Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ (ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ extends). НаслСдованиС ΠΆΠ΅ Ρ‡Π΅Ρ€Π΅Π· интСрфСйсы (ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ implements) являСтся ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ, слСдуСт ΠΈΠ·Π±Π΅Π³Π°Ρ‚ΡŒ наслСдованиС Ρ‡Π΅Ρ€Π΅Π· Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Ρ‚Π°ΠΌ, Π³Π΄Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ.

5. ΠžΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² Go

5.1. ΠšΠΎΠΌΠΏΠΎΠ·ΠΈΡ†ΠΈΡ Ρ‚ΠΈΠΏΠΎΠ²
ВмСсто ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ³ΠΎ наслСдования Π² Go строго ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ вмСсто наслСдования ΠΈ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρƒ структурами ΠΈ интСрфСйсами строятся ΠΏΠΎ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ°ΠΌ is-a ΠΈ has-a. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ здСсь ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² прСдставляСтся встраиваСмыми Ρ‚ΠΈΠΏΠ°ΠΌΠΈ, Ρ‚Π°ΠΊ, Go позволяСт Π²ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ структуру Π² структуру, создавая ΠΏΡ€ΠΈ этом ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ Ρ‚ΠΈΠΏΠ° has-a. Π₯ΠΎΡ€ΠΎΡˆΠΈΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ являСтся связь ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ Person ΠΈ Address Π² ΠΊΠΎΠ΄Π΅ Π½ΠΈΠΆΠ΅:

type Person struct {
   Name string
   Address Address
}

type Address struct {
   Number string
   Street string
   City   string
   State  string
   Zip    string
}

func (p *Person) Talk() {
    fmt.Println("Hi, my name is", p.Name)
}

func (p *Person) Location() {
    fmt.Println("Im at", p.Address.Number, p.Address.Street, p.Address.City, p.Address.State, p.Address.Zip)
}

func main() {
    p := Person{Name: "Steve"}
    p.Address = Address{ Number: "13", Street: "Main" }
    p.Address.City = "Gotham"
    p.Address.State = "NY"
    p.Address.Zip = "01313"
    p.Talk()
    p.Location()
}

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:

>  Hi, my name is Steve
>  Im at 13 Main Gotham NY 01313

play.golang.org/p/5TVBDR7AYo

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Π°ΠΆΠ½ΠΎ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Address остаётся обособлСнной ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒΡŽ, Π½Π°Ρ…ΠΎΠ΄ΡΡΡŒ Π²Π½ΡƒΡ‚Ρ€ΠΈ Person. Π’ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ main продСмонстрировано, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ p.Address ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ адрСса ΠΈ, ΠΎΠ±Ρ€Π°Ρ‰Π°ΡΡΡŒ ΠΊ Π΅Π³ΠΎ полям Ρ‡Π΅Ρ€Π΅Π· Ρ‚ΠΎΡ‡ΠΊΡƒ, ΠΏΡ€ΠΎΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ.

5.2. Π˜ΠΌΠΈΡ‚Π°Ρ†ΠΈΡ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌΠ° ΠΏΠΎΠ΄Ρ‚ΠΈΠΏΠΎΠ²

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅ Π°Π²Ρ‚ΠΎΡ€Π°. ΠŸΠ΅Ρ€Π²Π°Ρ вСрсия Π΄Π°Π½Π½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠΈ Π½Π΅Π²Π΅Ρ€Π½ΠΎ объясняла Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ is-a Ρ‡Π΅Ρ€Π΅Π· Π°Π½ΠΎΠ½ΠΈΠΌΠ½Ρ‹Π΅ поля структуры. На Π΄Π΅Π»Π΅ ΠΆΠ΅ ΠΎΠ½Π° лишь Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ is-a, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈ свойства становятся Π²ΠΈΠ΄ΠΈΠΌΡ‹ΠΌΠΈ ΠΈΠ·Π²Π½Π΅, ΠΊΠ°ΠΊ Ссли Π±Ρ‹ ΠΎΠ½ΠΈ сущСствовали Π²ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰Π΅ΠΉ структурС. Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π½Π΅ являСтся is-a ΠΏΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌ, описанным Π΄Π°Π»Π΅Π΅, ΠΎΠ΄Π½Π°ΠΊΠΎ, Π² Go Π΅ΡΡ‚ΡŒ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° is-a ΠΈ достигаСтся ΠΎΠ½Π° Ρ‡Π΅Ρ€Π΅Π· интСрфСйсы. ВСкущая вСрсия ΡΡ‚Π°Ρ‚ΡŒΠΈ ссылаСтся Π½Π° Π°Π½ΠΎΠ½ΠΈΠΌΠ½Ρ‹Π΅ поля ΠΊΠ°ΠΊ Π½Π° ΠΈΠΌΠΈΡ‚Π°Ρ†ΠΈΡŽ is-a, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ΠΈ ΠΏΠΎΡ…ΠΎΠΆΠΈ Π½Π° ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌΠ°, Π½ΠΎ Π½Π΅ Π±ΠΎΠ»Π΅Π΅. //

Π˜ΠΌΠΈΡ‚Π°Ρ†ΠΈΡ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ is-a Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΌ ΠΆΠ΅ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ. ΠŸΡƒΡΡ‚ΡŒ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ (Person) ΡƒΠΌΠ΅Π΅Ρ‚ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ. Π“ΠΎΡ€ΠΎΠΆΠ°Π½ΠΈΠ½ (Citizen) являСтся Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠΎΠΌ (Person), Π° Π·Π½Π°Ρ‡ΠΈΡ‚ Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΠΌΠ΅Π΅Ρ‚ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ (Talk). Π Π°ΡΡˆΠΈΡ€ΠΈΠΌ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ с ΡƒΡ‡Ρ‘Ρ‚ΠΎΠΌ этого.

type Citizen struct {
   Country string
   Person // Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΠΎΠ΅ ΠΏΠΎΠ»Π΅ Π±Π΅Π· ΠΈΠΌΠ΅Π½ΠΈ
}

func (c *Citizen) Nationality() {
    fmt.Println(c.Name, "is a citizen of", c.Country)
}

func main() {
    c := Citizen{}
    c.Name = "Steve"
    c.Country = "America"
    c.Talk()
    c.Nationality()
}

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:

>  Hi, my name is Steve
>  Steve is a citizen of America

play.golang.org/p/eCEpLkQPR3

ΠœΡ‹ Π½Π°Π»Π°Π΄ΠΈΠ»ΠΈ ΠΈΠΌΠΈΡ‚Π°Ρ†ΠΈΡŽ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ is-a ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΠΎΠ΅ ΠΏΠΎΠ»Π΅ структуры, Π² Π΄Π°Π½Π½ΠΎΠΌ случаС ΠΏΠΎΠ»Π΅ Person (указываСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΈΠΏ) Ρƒ Citizen. Π’ΠΈΠΏ Citizen ΠΏΡ€ΠΈΠΎΠ±Ρ€Ρ‘Π» всС свойства ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Ρ‚ΠΈΠΏΠ° Person ΠΈ ΠΈΠΌΠ΅Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅ΠΊΡ€Ρ‹Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· этих свойств ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² своими. НапримСр, ΠΏΡƒΡΡ‚ΡŒ городскиС ΠΆΠΈΡ‚Π΅Π»ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΡ‚Π²Π΅Ρ‡Π°Ρ‚ΡŒ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠ½Π°Ρ‡Π΅:

func (c *Citizen) Talk() {
    fmt.Println("Hello, my name is", c.Name, "and Im from", c.Country)
}

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:

>  Hello, my name is Steve and Im from America
>  Steve is a citizen of America

play.golang.org/p/jafbVPv5H9

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π² main вызываСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ *Citizen.Talk() вмСсто *Person.Talk().

6. ΠŸΠΎΡ‡Π΅ΠΌΡƒ Π°Π½ΠΎΠ½ΠΈΠΌΠ½Ρ‹Π΅ поля Π½Π΅ Π΄Π°ΡŽΡ‚ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ

Π˜ΠΌΠ΅ΡŽΡ‚ΡΡ Π΄Π²Π΅ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹.

6.1. ΠžΡΡ‚Π°Ρ‘Ρ‚ΡΡ доступ ΠΊ ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΌ полям ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· встроСнных Ρ‚ΠΈΠΏΠΎΠ²

Ну, Π½Π° самом Π΄Π΅Π»Π΅ это Π½Π΅ Ρ‚Π°ΠΊ ΡƒΠΆ ΠΈ ΠΏΠ»ΠΎΡ…ΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΏΡ€ΠΈ мноТСствСнном «наслСдовании» становится Π½Π΅ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΈΠ· Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΡ… классов Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Π²Π°Π½. ΠŸΡ€ΠΈ использовании Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΠΎΠ³ΠΎ поля Go создаёт Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ ΠΏΠΎΠ»Π΅, дублируя имя Ρ‚ΠΈΠΏΠ°, поэтому Π²Ρ‹ всСгда смоТСтС ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ всСх Π°Π½ΠΎΠ½ΠΈΠΌΠ½Ρ‹Ρ… ΠΏΠΎΠ»Π΅ΠΉ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π±Π°Π·ΠΎΠ²Ρ‹Ρ… классов Π² нашСй ΠΈΠΌΠΈΡ‚Π°Ρ†ΠΈΠΈ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ°. ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

func main() {
    c := Citizen{}
    c.Name = "Steve"
    c.Country = "America"
    c.Talk()         // <- ΠœΠ΅Ρ‚ΠΎΠ΄ доступСн
    c.Person.Talk()  // <- Π’Π°ΠΊΠΆΠ΅ доступСн
    c.Nationality()
}

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:

>  Hello, my name is Steve and Im from America
>  Hi, my name is Steve
>  Steve is a citizen of America

6.2. Π’ΠΈΠΏ-ΠΏΠΎΡ‚ΠΎΠΌΠΎΠΊ Π½Π΅ становится Ρ‚ΠΈΠΏΠΎΠΌ-ΠΏΡ€Π΅Π΄ΠΊΠΎΠΌ

Если Π±Ρ‹ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ Π±Ρ‹Π» настоящий, Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΠΎΠ΅ ΠΏΠΎΠ»Π΅ заставило Π±Ρ‹ Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰ΠΈΠΉ Ρ‚ΠΈΠΏ ΡΡ‚Π°Ρ‚ΡŒ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡ‹ΠΌ Ρ‚ΠΈΠΏΠΎΠΌ, Π½ΠΎ Π² Go ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡ‹ΠΉ ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰ΠΈΠΉ Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π° ΠΎΡΡ‚Π°ΡŽΡ‚ΡΡ Ρ€Π°Π·Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ. Π›ΡƒΡ‡ΡˆΠ΅ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

type A struct {
}

type B struct {
	A // B is-a A
}

func save(A) {
	// xxx
}

func main() {
	b := &B{}
	save(b) // OOOPS! b IS NOT A
}

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:

>  prog.go:17: cannot use b (type *B) as type A in function argument
>   [process exited with non-zero status]

play.golang.org/p/EmodogIiQU

Π”Π°Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ Π² этом ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Ρ€ΠΈΠΈ с Hacker News. Бпасибо, Optymizer.

7. Настоящий ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ ΠΏΠΎΠ΄Ρ‚ΠΈΠΏΠΎΠ²

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡΡ‹ Π² Go β€” ΡˆΡ‚ΡƒΠΊΠ° довольно ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Π°Ρ ΠΏΠΎ своСй ΠΏΡ€ΠΈΡ€ΠΎΠ΄Π΅. Π’ Π΄Π°Π½Π½ΠΎΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΌΡ‹ сосрСдоточимся Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ интСрфСйсов для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌΠ°, Ρ‡Ρ‚ΠΎ Π½Π΅ являСтся ΠΈΡ… ΠΏΠ΅Ρ€Π²ΠΎΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠΉ Π·Π°Π΄Π°Ρ‡Π΅ΠΉ.

Как я ΡƒΠΆΠ΅ писал Ρ€Π°Π½ΡŒΡˆΠ΅, ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ это ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ is-a. Π’ Go ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ‚ΠΈΠΏ являСтся обособлСнным ΠΈ Π½ΠΈΡ‡Ρ‚ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°ΠΌΠ°ΡΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΏΠΎΠ΄ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ‚ΠΈΠΏ просто Ρ‚Π°ΠΊ, Π½ΠΎ Π·Π°Ρ‚ΠΎ ΠΎΠ±Π° Ρ‚ΠΈΠΏΠ° ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΏΠΎΠ΄ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ интСрфСйс. Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡΡ‹ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈ это ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π½Π°ΠΌ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ настоящСС ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ is-a ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ.

Π€Π°ΠΊΡ‚ соотвСтствия Ρ‚ΠΈΠΏΠ° интСрфСйсу провСряСтся автоматичСски, ΠΏΡƒΡ‚Ρ‘ΠΌ сравнСния Π½Π°Π±ΠΎΡ€ΠΎΠ² Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΡ‹Ρ… интСрфСйсом ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΈ Π½Π°Π±ΠΎΡ€Π° ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΡ…ΡΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Ρƒ провСряСмого Ρ‚ΠΈΠΏΠ°. Π˜Π½Ρ‹ΠΌΠΈ словами, Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠ°ΠΊ «Ссли Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π΄Π΅Π»Π°Ρ‚ΡŒ это, Ρ‚ΠΎ ΠΎΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ здСсь», Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΈΠΌΠ΅Π΅Ρ‚ мСсто Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ ΡƒΡ‚ΠΈΠ½ΠΎΠΉ Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ.

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡΡΡŒ ΠΊ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌΡƒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π½ΠΎΠ²ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ SpeakTo ΠΈ Π² main ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π΅Ρ‘ ΠΏΠΎΠΎΡ‡Π΅Ρ€Ρ‘Π΄Π½ΠΎ ΠΊ экзСмплярам Citizen ΠΈ Person.

func SpeakTo(p *Person) {
    p.Talk()
}

func main() {
    p := &Person{Name: "Dave"}
    c := &Citizen{Person: Person{Name: "Steve"}, Country: "America"}

    SpeakTo(p)
    SpeakTo(c)
}

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:

>  Running it will result in
>  prog.go:48: cannot use c (type *Citizen) as type *Person in function argument
>  [process exited with non-zero status]

play.golang.org/p/fkKz0FkaEk

Как ΠΈ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π»ΠΎΡΡŒ, конструкция просто Π½Π΅Π²Π΅Ρ€Π½Π°. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС Citizen Π½Π΅ являСтся Person, Π΄Π°ΠΆΠ΅ Π½Π΅ смотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Ρƒ Π½ΠΈΡ… ΠΎΠ±Ρ‰ΠΈΠ΅ свойства. Однако, Π΄ΠΎΠ±Π°Π²ΠΈΠΌ интСрфСйс Human, сдСлаСм Π΅Π³ΠΎ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅ΠΌΡ‹ΠΌ Ρ‚ΠΈΠΏΠΎΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ SpeakTo ΠΈ Π²ΠΎΡ‚, всё пошло ΠΏΠΎ ΠΏΠ»Π°Π½Ρƒ.

type Human interface {
    Talk()
}

func SpeakTo(h Human) {
    h.Talk()
}

func main() {
    p := &Person{Name: "Dave"}
    c := &Citizen{Person: Person{Name: "Steve"}, Country: "America"}

    SpeakTo(p)
    SpeakTo(c)
}

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:

>   Hi, my name is Dave
>   Hi, my name is Steve

play.golang.org/p/vs92w57c5-

ΠŸΠΎΠ΄Ρ‹Ρ‚ΠΎΠΆΠΈΠ²Π°Ρ, ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π΄Π²Π° Π²Π°ΠΆΠ½Ρ‹Ρ… замСчания ΠΏΡ€ΠΎ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ Π² Go:

  • Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π°Π½ΠΎΠ½ΠΈΠΌΠ½Ρ‹Π΅ поля ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ соотвСтствия Ρ‚ΠΈΠΏΠ° интСрфСйсу, Π² Ρ‚ΠΎΠΌ числС ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ соотвСтствия Π½Π°Π±ΠΎΡ€Ρƒ интСрфСйсов, Ρ‚Π΅ΠΌ самым достигая ΠΏΠΎΡ‡Ρ‚ΠΈ каноничСского ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌΠ°.
  • Go ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ ΠΏΠΎΠ΄Ρ‚ΠΈΠΏΠΎΠ² Π²ΠΎ врСмя использования значСния (c.Name = "Xlab"), Π½ΠΎ Π² Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΆΠ΅ всС Ρ‚ΠΈΠΏΡ‹ ΡΠ²Π»ΡΡŽΡ‚ΡΡ обособлСнными. Как ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² послСднСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ свойство Name Ρƒ Citizen, ΠΌΡ‹ обязаны явно ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ это свойство Ρƒ Person, присвоив Π·Π°Ρ‚Π΅ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Person ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌΡƒ полю Ρƒ Citizen. (Ρ€Π΅Ρ‡ΡŒ ΠΎ составном Π»ΠΈΡ‚Π΅Ρ€Π°Π»Π΅ Citizen{Person: Person{Name: "Steve"}, Country: "America"}).

8. Π˜Ρ‚ΠΎΠ³ΠΈ

Как Π²Ρ‹ ΠΌΠΎΠ³Π»ΠΈ Π½Π°Π±Π»ΡŽΠ΄Π°Ρ‚ΡŒ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… Π²Ρ‹ΡˆΠ΅, Ρ„ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ ΠΈ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ Π² Go. Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ отличия Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ»ΠΎΠ³ΠΈΠΈ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ нСсколько ΠΈΠ½Ρ‹Π΅ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹, Π½Π΅ΠΆΠ΅Π»ΠΈ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… классичСских языках ООП. Π’Π°ΠΊ, для объСдинСния состояния ΠΈ повСдСния Π² ΠΎΠ΄Π½ΠΎΠΉ сущности ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ структуры с Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌΠΈ (ΠΏΡ€ΠΈΠΊΡ€Π΅ΠΏΠ»Ρ‘Π½Π½Ρ‹ΠΌΠΈ) ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ. Для обозначСния ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΉ has-a ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ композиция, Ρ‚Π΅ΠΌ самым минимизируя количСство ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π΅Π½ΠΈΠΉ Π² ΠΊΠΎΠ΄Π΅ ΠΈ избавляя нас ΠΎΡ‚ Π±Π°Ρ€Π΄Π°ΠΊΠ° с классичСским наслСдованиСм. Для установлСния is-a ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΉ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ Π² Go ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ интСрфСйсы, Π±Π΅Π· Π»ΠΈΡˆΠ½ΠΈΡ… слов ΠΈ ΠΊΠΎΠ½Ρ‚Ρ€ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΈΠ²Π½Ρ‹Ρ… описаний.

Π’ΠΎΡ‚ Ρ‚Π°ΠΊ, встрСчайтС Π½ΠΎΠ²ΡƒΡŽ модСль ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ программирования β€” Π±Π΅Π· ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²!

~ translation & adaptation by Xlab.

Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅: Β«ΠŸΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ΅ использованиС ΠΊΠΎΠ΄Π° Π² Go Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅Β»

ΠšΡΡ‚Π°Ρ‚ΠΈ, Π½Π° всякий случай ΠΏΡ€ΠΈΠ²Π΅Π΄Ρƒ здСсь эту Ρ†ΠΈΡ‚Π°Ρ‚Ρƒ:

I invented the term Object-Oriented and I can tell you I did not have C++ in mind.

β€” Alan Kay

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅? ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Webopedia

Главная »БРОК» O Β»

Автор: Π’Π°Π½Π³ΠΈ Π‘ΠΈΠ»

O bject- o riented p rogramming ( OOP ) относится ΠΊ Ρ‚ΠΈΠΏΡƒ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½ΠΎΠ³ΠΎ программирования (Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния), Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ программисты ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… структуры Π΄Π°Π½Π½Ρ‹Ρ…, Π° Ρ‚Π°ΠΊΠΆΠ΅ Ρ‚ΠΈΠΏΡ‹ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ (Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΊ структурС Π΄Π°Π½Π½Ρ‹Ρ….

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, структура Π΄Π°Π½Π½Ρ‹Ρ… становится ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΊΠ°ΠΊ Π΄Π°Π½Π½Ρ‹Π΅, Ρ‚Π°ΠΊ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, программисты ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΎΠ΄Π½ΠΈΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌ. НапримСр, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ характСристики ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ².

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ ООП

Если Π²Ρ‹ Π½ΠΎΠ²ΠΈΡ‡ΠΎΠΊ Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… языках программирования, Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π½Π°Ρ‚ΡŒ нСсколько основ, ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ Π²Ρ‹ смоТСтС Π½Π°Ρ‡Π°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ с ΠΊΠΎΠ΄ΠΎΠΌ. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ опрСдСлСния Webopedia ΠΏΠΎΠΌΠΎΠ³ΡƒΡ‚ Π²Π°ΠΌ Π»ΡƒΡ‡ΡˆΠ΅ ΠΏΠΎΠ½ΡΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅:

  • Абстракция: ΠŸΡ€ΠΎΡ†Π΅ΡΡ выдСлСния (абстрагирования) ΠΎΠ±Ρ‰ΠΈΡ… характСристик ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€.
  • Класс: ΠšΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². Класс опрСдСляСт всС ΠΎΠ±Ρ‰ΠΈΠ΅ свойства Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΅ΠΌΡƒ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‚.
  • Π˜Π½ΠΊΠ°ΠΏΡΡƒΠ»ΡΡ†ΠΈΡ: ΠŸΡ€ΠΎΡ†Π΅ΡΡ объСдинСния элСмСнтов для создания Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° — это Ρ‚ΠΈΠΏ инкапсуляции, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½Π° ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ‚ ΡΠ΅Ρ€ΠΈΡŽ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½Ρ‹Ρ… инструкций.
  • Π‘ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ: ΠŸΡ€ΠΎΡ†Π΅ΡΡ скрытия Π΄Π΅Ρ‚Π°Π»Π΅ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈΠ»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π‘ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ — ΠΌΠΎΡ‰Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ программирования, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ сниТаСт ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ.
  • НаслСдованиС: функция, которая прСдставляСт связь Β«Π΅ΡΡ‚ΡŒΒ» ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ классами.
  • Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ: языков ΠΈ ΠΊΠΎΠ΄ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ прилоТСния ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ для связи Π΄Ρ€ΡƒΠ³ с Π΄Ρ€ΡƒΠ³ΠΎΠΌ ΠΈ с ΠΎΠ±ΠΎΡ€ΡƒΠ΄ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ.
  • ОбмСн сообщСниями: ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° сообщСний — это Ρ„ΠΎΡ€ΠΌΠ° связи, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠ°Ρ Π² ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ.
  • ΠžΠ±ΡŠΠ΅ΠΊΡ‚: Π°Π²Ρ‚ΠΎΠ½ΠΎΠΌΠ½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ состоит ΠΈΠ· Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ для управлСния Π΄Π°Π½Π½Ρ‹ΠΌΠΈ.
  • ΠŸΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ: Π‘ΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ языка программирования ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΏΠΎ-Ρ€Π°Π·Π½ΠΎΠΌΡƒ Π² зависимости ΠΎΡ‚ ΠΈΡ… Ρ‚ΠΈΠΏΠ° Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ»ΠΈ класса.
  • ΠŸΠΎΡ€ΡΠ΄ΠΎΠΊ дСйствий: Ρ€Π°Π·Π΄Π΅Π» ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΠΉ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ Π·Π°Π΄Π°Ρ‡Ρƒ.

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ программирования

Одно ΠΈΠ· основных прСимущСств ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ программирования ΠΏΠ΅Ρ€Π΅Π΄ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π½ΠΎΠ³ΠΎ программирования состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ программистам ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΏΡ€ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ Π½ΠΎΠ²ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡΡ‚ ΠΌΠΎΠΆΠ΅Ρ‚ просто ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΡƒΠ½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π²ΡˆΠΈΠΉ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΈΠ· своих Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΎΡ‚ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². Π­Ρ‚ΠΎ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ.

OOPL — языки ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ программирования

An o bject- o riented p rogramming l anguage ( OOPL ) — это язык программирования высокого уровня, основанный Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ. Для выполнСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ программирования Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ язык программирования.МногиС соврСмСнныС языки программирования ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ, ΠΎΠ΄Π½Π°ΠΊΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ старыС языки программирования, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Паскаль, ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ вСрсии. ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… языков программирования Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ Java, C ++ ΠΈ Smalltalk.

ΠŸΠ΅Ρ€Π²ΠΎΠ΅ OOPL

Simula, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΉ Π² 1960-Ρ… Π³ΠΎΠ΄Π°Ρ… Π² НорвСТском Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΌ Ρ†Π΅Π½Ρ‚Ρ€Π΅ Π² Осло, считаСтся ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ языком программирования. НСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Smaslltalk являСтся ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ, ΠΎΠ½ считаСтся СдинствСнной настоящСй ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ срСдой программирования, с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ слСдуСт ΡΡ€Π°Π²Π½ΠΈΠ²Π°Ρ‚ΡŒ всС ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅.Π’ΠΏΠ΅Ρ€Π²Ρ‹Π΅ ΠΎΠ½ Π±Ρ‹Π» Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½ для использования Π² ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… цСлях Π² ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠΌ Ρ†Π΅Π½Ρ‚Ρ€Π΅ Xerox Corporation Π² Пало-ΠΠ»ΡŒΡ‚ΠΎ Π² ΠΊΠΎΠ½Ρ†Π΅ 1960-Ρ… Π³ΠΎΠ΄ΠΎΠ² ΠΈ Π²Ρ‹ΠΏΡƒΡ‰Π΅Π½ Π² 1972 Π³ΠΎΠ΄Ρƒ.

РСкомСндуСмая Π»ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Π°: Π£Ρ‡Π΅Π±Π½Ρ‹Π΅ пособия Webopedia — ΠžΡΠ½ΠΎΠ²Ρ‹ Java: ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, синтаксис ΠΈ условныС обозначСния ΠΈ ΠžΡΠ½ΠΎΠ²Ρ‹ Java, Ρ‡Π°ΡΡ‚ΡŒ 2: ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹, ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ ΠΈ структуры.




ΠΠžΠ’ΠžΠ‘Π’Π˜ Π’Π•Π‘ΠžΠŸΠ•Π”Π˜Π˜

Π‘ΡƒΠ΄ΡŒΡ‚Π΅ Π² курсС послСдних событий Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ»ΠΎΠ³ΠΈΠΈ Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ бСсплатного ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ Π±ΡŽΠ»Π»Π΅Ρ‚Π΅Π½Ρ Webopedia.ΠŸΡ€ΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΡΠΉΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ΄ΠΏΠΈΡΠ°Ρ‚ΡŒΡΡ сСйчас.

.Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅

ΠΏΡ€ΠΎΡ‚ΠΈΠ² ООП | 8 основных ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½ΡƒΠΆΠ½ΠΎ Π·Π½Π°Ρ‚ΡŒ

Различия ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΈ ООП

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

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅

  • Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ‚Π°ΠΊΠΈΠ΅ языки программирования, ΠΊΠ°ΠΊ Lisp, Clojure, Wolfram, Erlang, Haskell, F #, R ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ извСстныС ΠΈ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ языки. Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π² области Π½Π°ΡƒΠΊΠΈ ΠΎ Π΄Π°Π½Π½Ρ‹Ρ…, Π° R — популярный язык срСди спСциалистов ΠΏΠΎ Π΄Π°Π½Π½Ρ‹ΠΌ.
  • Π―Π·Ρ‹ΠΊΠΈ

  • FP ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΠΏΠ΅Ρ€Π΅Π²Π΅Π΄Π΅Π½Ρ‹ Π² ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΡƒΡŽ срСду, Ρ‡Ρ‚ΠΎ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π°.
  • Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ обСспСчиваСт Ρ‚Π°ΠΊΠΈΠ΅ прСимущСства, ΠΊΠ°ΠΊ ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ, Π»Π΅Π½ΠΈΠ²ΠΎΠ΅ вычислСниС, Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΠ΄ Π±Π΅Π· ошибок, ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅. На простом языкС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² написании Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΈΠΌΠ΅ΡŽΡ‰Π΅ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ для выполнСния ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ для прилоТСния.
  • Π€ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΌΠΎΠΆΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ Π² любой ΠΌΠΎΠΌΠ΅Π½Ρ‚. Π­Ρ‚ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΊΠΎΠ΄ΠΎΠΌ, ΠΈ ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎ ΠΆΠ΅ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ снова ΠΈ снова.
  • Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, основанноС Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… концСпциях, — это 1. Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ высокого порядка (HOF). 2. ЧистыС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. 3. РСкурсия. 4. Бтрогая ΠΈ нСстрогая ΠΎΡ†Π΅Π½ΠΊΠ°. 5. БистСмы Ρ‚ΠΈΠΏΠΎΠ². 6. Бсылочная ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎΡΡ‚ΡŒ. Π’ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚ΡΡ пСрвоклассными Π³Ρ€Π°ΠΆΠ΄Π°Π½Π°ΠΌΠΈ.

ООП (ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅)

  • ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, основанноС Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… основных функциях: 1. Абстракция: Π­Ρ‚ΠΎ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ Π² прСдоставлСнии ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΈΠ»ΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ²Ρ‹ΡˆΠ°Π΅Ρ‚ ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ. 2. НаслСдованиС: Π­Ρ‚ΠΎ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ Π² наслСдовании ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, свойств ΠΈ ΠΏΠΎΠ»Π΅ΠΉ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠΌ классС. 3. ΠŸΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ: Он ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΎΠ΄Π½Ρƒ Π·Π°Π΄Π°Ρ‡Ρƒ Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ способами с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈ пСрСопрСдСлСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‚Π°ΠΊΠΆΠ΅ извСстны ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ компиляции ΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния соотвСтствСнно. 4. Π˜Π½ΠΊΠ°ΠΏΡΡƒΠ»ΡΡ†ΠΈΡ: ΠŸΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΡΠΊΡ€Ρ‹Ρ‚ΡŒ нСсущСствСнныС Π΄Π°Π½Π½Ρ‹Π΅ ΠΎΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΈ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ нСсанкционированный доступ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ.
  • ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ языки программирования: C ++, C #, Java, Python, Ruby, PHP, Perl, Objective-C, Swift, Dart, Lisp ΠΈ Ρ‚. Π”.Π’ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ. НовыС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π»Π΅Π³ΠΊΠΎ созданы для ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ класса, Π° ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ.
  • Он Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΠΌΠ΅Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ управлСния ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ. Π­Ρ‚ΠΎ Π΄Π°Π΅Ρ‚ большоС прСимущСство ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½Π° Π±ΠΎΠ»Π΅Π΅ ΠΌΠ΅Π»ΠΊΠΈΠ΅ части, ΠΈ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΠΈΠ»ΠΈ Ρ„Π°Π·Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΈΠ»ΠΈ Π·Π°ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ.

ΠŸΡ€ΡΠΌΠΎΠ΅ сравнСниС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ программирования ΠΈ ООП

НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ 8 Π»ΡƒΡ‡ΡˆΠΈΡ… сравнСний ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΈ ООП:

.

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *