Pemrograman berorientasi objek adalah ide yang sangat buruk yang hanya bisa muncul di California.
- Edsger Weebe Dijkstra
Mungkin ini hanya perasaan saya, tetapi
pemrograman berorientasi objek tampaknya menjadi standar, paradigma desain perangkat lunak yang paling umum. Dialah yang biasanya diajarkan kepada siswa, dijelaskan dalam tutorial online dan, untuk beberapa alasan, diterapkan secara spontan bahkan ketika mereka tidak akan melakukannya.
Saya tahu betapa menariknya dia dan betapa luar biasanya ide ini muncul di permukaan. Butuh bertahun-tahun bagiku untuk menghancurkan mantranya, dan sekarang aku mengerti betapa buruknya dia dan mengapa. Berkat sudut pandang ini, saya memiliki keyakinan yang jelas bahwa orang harus menyadari kesalahan OOP dan mengetahui solusi yang dapat digunakan sebagai gantinya.
Banyak orang telah membahas masalah OOP sebelumnya, dan di akhir posting ini saya akan mencantumkan artikel dan video favorit saya. Tapi pertama-tama, saya ingin membagikan pandangan saya sendiri.
Data lebih penting daripada kode
. , .
, :
-> ->
. ! , , : , . . , , .
, ,
, . , .
Customer
?
class Customer
. ?
class RenderingContext
.
«» , , , . . .
, .
, .
FizzBuzz Enterprise Edition — , .
, — . . - , .
, . .
class Customer
class Order
, .
class OrderManager
Order
,
Customer
. , , .
, , , .
- , - , , , .
Context
, - , , - Enterprise.
, . :
class Player
hits()
class Monster
, ?
hp
Monster
attackPower
Player
;
xp
Player
Monster
Monster
.
Player.hits(Monster m)
Monster.isHitBy(Player p)
?
class Weapon
?
isHitBy
Player
currentWeapon()
?
. , , — . , , Enterprise.
:
— , , . .
, , ( ). : , , , , , . : , .
— ,
ADT, . , , , .
, , , API .. «»/«»/«». , (Java/Scala) / . , , , , , .
-
: , — (). .
, , , , , , . , .
- . , , , . .
, , . .
?
, « », , .
. , , , . , : ( , ) ..
, . ,
DataStore
API, . ADT/PoD, ID (, uuid ). :
Vec
HashMap
Index ID, «», , . , LRU .
DataStore
. . : stdin, , trust manager, .. «» , .. «»
DataStore
.
:
DataStore
, .
: , , , , ,
Customer
. :
Customer
—
DataStore
, «-» .
, — . , / . , :