分享下Object Oriented Programming

b42b82

53 回覆
41 Like 4 Dislike
b42b82 2021-08-01 12:56:12
可以加BaseClass入面本身無既attribute.
Derived Class唔單止inherit Base Class properties.
仲可以加自己獨有既Attribute.
E.g: 依家把PlasmaCutter可以升級加電筒.
依家Derived Class加左1個variable, 1個新function
int flashLightPower;
void ToggleFlashLight();
WeaponBaseClass本身有AimDownSight Function.
依家只需要Override existing class AimDownSight()再新加電筒既Logic.


所以加新槍 唔一定要跟足BaseClass嘅attribute
IT狗呃飯食 2021-08-01 15:10:13
其實香港真係好靚 2021-08-02 12:55:59
留名慢慢睇
AmandaSeyfreid 2021-08-02 16:42:17
含我呀 2021-08-03 16:02:40
張圖已經錯concept
class extend 另一個 class 依然係 class
object 係指 intenciate 左出黎既實物
含我呀 2021-08-03 16:14:16
*instantiate
EASport批鬥師 2021-08-03 16:21:29
lm
含我呀 2021-08-03 16:33:55
樓主個example focus響槍,如果有其他類型既武器,個 class inheritance 可以係:

Weapon
- Gun
- - Shotgun
- - Lazer Gun
- Bomb
- - Remote Bomb
- - Timed Bomb

但需唔需要一個咁既 inheritance 都係取決於你個system 運作係點,可以係冇Gun同Bomb呢兩個sub class,直接將所有野under Weapon都得
HEHE魔王R水吹 2021-08-03 18:17:59
如果將behaviour abstract做functional interface得唔得
慌失失大笨象 2021-08-03 19:46:43
其實係咪應該拆多個Ammo class出黎, 因為Weapon應該係跟個角色而Ammo應該可以獨立存在於個場境, 如果Bomb Extend Weapon咁當個角色死左既時候就要等埋個Bomb都爆埋先可以Release返個角色既Memory 當然如果隻Game可以執Weapon咁又另計
b42b82 2021-08-03 22:46:18
派左膠.
手快快無double check
wonderful123 2021-08-03 22:49:42
pointer呢?
下年再黎過嗎 2021-08-03 22:50:01
g chi lau pig
b42b82 2021-08-03 23:13:44
我本身寫都係拆多個Ammo Class出黎.
本身Dead Space可以汁4把槍.
4把槍(1,2,3,4) array size of 4
inventory slot 用Vector/Array都可以 限著max size.

Slot Maximum 未比條Vector/Array佢
圖入面有25個slot 但一開波無記錯得10個slot.
拎個variable限著inventory既max size.
子彈 assumption: 當佢每把槍default 10粒.
槍同子彈都比個enum佢.
PistolAmmo, RifleAmmo, SniperAmmo... etccc.
一拎支槍未for loop.
loop成條inventory array搵相應既子彈Enum
開槍之後 ammo--
含我呀 2021-08-04 10:20:14
release memory 應該唔關事,bomb 應該係獨戈立於player既一個個體,佢地各自既life cycle完左就各自release memory
含我呀 2021-08-04 10:26:09
refactoring通常係指將一個class/function/其他野重新命名,即係改名only🤔 你係想講 function override?
uraura 2021-08-04 21:17:37
有時 inheritance 個 relationship 太死
https://en.wikipedia.org/wiki/Composition_over_inheritance
含我呀 2021-08-05 09:33:30
學到野
無奶油俾人用 2021-08-05 10:46:06
interface ExplosiveClass {
     public bool shouldExplode() ; 
     public void willExplode() ; 
     public void  explode() ;  
}
class WeaponBase  {
   //... a lot of attribute
}

class AlotOfBomb extends WeaponBase implements ExplosiveClass {
}

class GunClass extends WeaponBase {
}


其實你唔單止可以咁做, 你可以用composite pattern , TS 黎講叫decorator , java 黎講叫 annotation , d code 既可以重用又能夠clean , 不過我建議以起貨為優先既話, 就唔好諗太多


class C4/Molotov/RemoteBomb extends WeaponBase  {
     @Explode
     public void damage() {
         //maybe damage ...etc
     }
}

class GunClass  extends WeaponBase  {
     @Shoot
     public void damage(@Attacker attacker, @Defender defender) {
         //maybe damage ...etc
     }
}
無奶油俾人用 2021-08-05 10:49:07
比起inheritance 如果真係無任何辦法, 無可奈何之下係可以用inheritance, 否則用composite 既做法會更好, 易於重用, 同埋睇code既時候, 唔需要睇番上幾個parent class 既野 , 有d放起parent class , 有d 又放起再上一個parent class, 可能睇都睇死你
無奶油俾人用 2021-08-05 10:54:51
利申: 中意寫連登仔覺得萬惡既php
吹水台自選台熱 門最 新手機台時事台政事台World體育台娛樂台動漫台Apps台遊戲台影視台講故台健康台感情台家庭台潮流台美容台上班台財經台房屋台飲食台旅遊台學術台校園台汽車台音樂台創意台硬件台電器台攝影台玩具台寵物台軟件台活動台電訊台直播台站務台黑 洞