|
Что такое ООП (объектно-ориентированное программирование)
|
|||
---|---|---|---|
#18+
Что такое ООП (объектно-ориентированное программирование) Тут вот какое дело, понимаю, что написаны тысячи, если не миллионы, книг и статей на тему... Сам я безработный разработчик предпенсионного возраста, нахожусь в поиске, и меня, хотя и редко, но приглашают на собеседование, где меня обязательно спросят про "основные принципы ООП", чем всегда ставят меня в тупик, я не знаю, что отвечать на этот вопрос. Когда-то, лет 30 назад, мне посчастливилось поработать в одном очень продвинутом коллективе известного ВУЗа, и там один из научных руководителей регулярно приходил в бешенстве с конференций, на которых обсуждались видения ООП и подходы к реализациям, потому что его понимание сильно отличалось от коллег-участников конференций с других кафедр. Кстати сказать, он написал java-подобный язык, который вроде до сих пор с успехом используют. Этим воспоминанием я хочу подчеркнуть, что проблема не такая уж и новая, и не такая уж и надуманная. В современных источниках об ООП-принципах вы непременно найдете тезис об инкапсуляции, наследовании и полиморфизме, тогда как на заре компьютерных наук ни один из разработчиков или компьютерных ученых ничего подобного вам бы не заявил. Наверняка здесь есть какая-то путаница. Ну, посудите сами, парадигмы процедурного программирования основанные на теореме структурного программирования окончательно сформировались только к началу 70-х годов прошлого века, а первые языки ООП появились еще в начале 60-х годов. Но современное поколение, в основной своей массе, почему-то считает, что ООП - это что-то новое, и к тому же неудачное, и поэтому его надо срочно заменить чем-то типа Питона или на худой конец Скалы итп. В этой связи встает вопрос: как же компьютерные ученые, разработчики первых языков ООП, представляли себе постановку задачи, и вообще, что это такое ООП? Идея состояла в том, что мы в реальном мире каким-то образом манипулируем объектами, и пришли к выводу, что все, что мы для этого делаем - мы передаем сообщения объектам, и самое интересное, что нам совершенно все равно, что там дальше происходит с этим сообщением, но мы уверены, что оно будет обработано и нами будет получен результат обработки. Тогда ученые и задумались, как бы нам создать такие языки программирования, чтобы и в виртуальной среде можно было решать задачи используя подобный подход. Например, когда еще не было электронной почты (многие даже не представляют, что такое было), люди писали письмо другу на бумаге, потом запечатывали его в конверт, писали на конверте адрес получателя и отправителя, потом несли конверт к почтовому ящику, опускали его туда, и ждали результат - либо "доставлено", либо "возврат отправителю". В данном примере мы имеем дело с объектом "почтовый ящик", мы передаем ему сообщение - опускаем письмо, другими словами: вызываем метод Result postBox.send(Letter letter); Это и есть первый принцип ООП — он так и называется: Message Passing. Нам абсолютно все равно, какие действия будут совершены после того, как мы опустим письмо в ящик, а их невероятно много: придет почтальон и заберет все письма из ящика, на почте отсортируют, отвезут к правильному самолету и тд, и тп. Дальше нам бы хотелось, чтобы почтовый ящик был таким, что в него можно было бы опускать письма любого типа: закзаные, открытки, микро бандероли …. типа того.. И мы бы не соверашали дополнительных действий, а просто бросали письмо любого типа в один и тот же ящик и ни о чем не задумывались, не задумывались, как этот ящик будет обрабатывать разные типы. Т.е. на этапе создания почтового ящика мы не знаем какого типа письма будут в него опускать, ящик должен уметь обрабатывать любой тип письма без дополнительных на то уведомлений. Переходя к программированию мы говорим, что на этапе компиляции тип объекта сообщения нам неизвестен, а узнаем мы этот тип только в рантайме — этот принцип ООП называется Late Binding, а никакой не полиморфизм. А полиморфизм — это всего лишь определенное поведение переменной. Ну и наконец подходим к главному. В реальной жизни мы и понятия не имеем, как создается и как работает почтовый ящик, мы просто находим уже готовый объект и опускаем туда письмо. Надо сказать, что этот подход довольно долго не удавалось сформулировать и как-то его осмыслить, и только в середине 70-х годов английский компьютерный ученый Майкл Джексон (кстати Java-разработчики обязательно знают библиотеку для JSON-процессинга Jackson – она названа в его честь) описал паттерн, который мы знаем как IoC. Вот мы и сформулировали три основных принципа ООП: 1. Message Passing 2. Late Binding 3. IoC А то, о чем все говорят, - это просто приемы проектирования приложений с использованием языков объектно-ориентированного программирования. Надеюсь, что интервьюеры прочитают этот мой опус и не будут больше задавать этот вопрос. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.01.2025, 10:21 |
|
Что такое ООП (объектно-ориентированное программирование)
|
|||
---|---|---|---|
#18+
со мной соглашаться не обязательно.
Это и есть первый принцип ООП — он так и называется: Message Passing. 1) Язык объектно - ориентированный тогда и только тогда, когда в языке есть синтаксическая конструкция наследования. Точка. 2) Инкапсуляция и полифорфизм никакого отношения к ООП не имеют. Если шо, это не я, это КарделлиАбади Теория Объектов Инкапсуляция и специальный полиморфизм преобразования был еще в фортране4, например. 3) Таксономическую идею наследования (мощность множества объектов каждого следующего производного класса меньше, чем мощность базового) - конструкция наследования не может реализовать в принципе. Как только появляется действие над объектами (метод соответствующий) -- все портится, в частности, изза одновременной ковариантности - контравариантости таких методов (Карделли и Б.Мейер в своих контрактах это разбирают). А не в частности ее (контракт) можно портить и любыми другими способами 4) Наследовать можно уменьшая, увеличивая, не изменяя мощность множества объектов производного класса. 5) "Все портится" == тип производного класса не является производным типом от типа базового класса. Самый простой пример (проще чем квадраты и прямоугольники анкла Боба) который можно выродить -- это наследование между полугруппой натуральных чисел - группой целых чисел. Переопределение сложения: небезопасное наследование в группе целых 6) Любая функция P, в которую передается объект -- это функция высшего порядка, как как вместе с объектом в P передаются функции. 7) понятие объекта надо заменить понятием автомата. Это тоже самое, но это математика и имеет понятное определение. 8) на интервью это рассказыавть не надо, религиозные фанатики не возьмут на работу. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.01.2025, 10:53 |
|
Что такое ООП (объектно-ориентированное программирование)
|
|||
---|---|---|---|
#18+
аа. Без однозначной спецификации класса ( контракта в смысле Б.Мейера) не имеет смысла обсуждение наследования - полиморфизма в принципе. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.01.2025, 11:00 |
|
Что такое ООП (объектно-ориентированное программирование)
|
|||
---|---|---|---|
#18+
1) Язык объектно - ориентированный тогда и только тогда, когда в языке есть синтаксическая конструкция наследования. Точка. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.01.2025, 11:21 |
|
Что такое ООП (объектно-ориентированное программирование)
|
|||
---|---|---|---|
#18+
7) понятие объекта надо заменить понятием автомата. Это тоже самое, но это математика и имеет понятное определение. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.01.2025, 11:24 |
|
Что такое ООП (объектно-ориентированное программирование)
|
|||
---|---|---|---|
#18+
Если про основные принципы объектно ориентированного программирования вопрос задают на собеседовании, то надо отвечать как по учебнику. Потому что автор лезет в технические подробности. а на собеседовании люди не очень то понимают это, и надо проверить. знает человек или нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.01.2025, 15:31 |
|
Что такое ООП (объектно-ориентированное программирование)
|
|||
---|---|---|---|
#18+
7) понятие объекта надо заменить понятием автомата. Это тоже самое, но это математика и имеет понятное определение. Метод получает на вход справочник и айди на выход выдает шонадо. Это функций. Парнас. Переменная - это автомат ... |
|||
:
Нравится:
Не нравится:
|
|||
17.01.2025, 17:33 |
|
Что такое ООП (объектно-ориентированное программирование)
|
|||
---|---|---|---|
#18+
Это и есть первый принцип ООП — он так и называется: Message Passing. Она нужна, что бы параллельные процессы (два дочерних окна имеют два разных обработчика, которые работают типа одновременно) работали вдвоем. И не для чего больше. Вот в спойлере передача сообщений есть, а ооп - нет: Спойлер Код: C 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191. 192. 193. 194. 195. 196. 197. 198. 199. 200. 201. 202. 203. 204. 205. 206. 207. 208. 209. 210. 211. 212. 213. 214. 215. 216. 217. 218. 219. 220. 221. 222. 223. 224. 225. 226. 227. 228. 229. 230. 231. 232. 233. 234. 235. 236. 237. 238. 239. 240. 241. 242. 243. 244. 245. 246. 247. 248. 249. 250. 251. 252. 253. 254. 255. 256. 257. 258. 259. 260. 261. 262. 263. 264. 265. 266. 267. 268. 269. 270. 271. 272. 273. 274. 275. 276. 277. 278. 279. 280. 281. 282. 283. 284. 285. 286. 287. 288. 289. 290. 291. 292. 293. 294. 295. 296. 297. 298. 299. 300. 301. 302. 303. 304. 305. 306. 307. 308. 309. 310. 311. 312. 313. 314. 315. 316. 317. 318. 319. 320. 321. 322. 323. 324. 325. 326. 327. 328. 329. 330. 331. 332. 333. 334. 335. 336. 337. 338. 339. 340. 341. 342. 343. 344. 345. 346. 347. 348. 349. 350. 351. 352.
... |
|||
:
Изменено: 17.01.2025, 17:44 - tchingiz
Нравится:
Не нравится:
|
|||
17.01.2025, 17:41 |
|
|
start [/forum/topic.php?fid=16&tid=2187152]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
39ms |
get topic data: |
15ms |
get forum data: |
3ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
others: | 260ms |
total: | 394ms |
0 / 0 |