I'm stuck constructing a class hierarchy.

Say I have classes called `Bullet` and `Mob`. (The names are unimportant; they're just examples.) I can think of two approaches:

 1. **Centralised**: Classes are purely a way to store data and nothing else. I could have, for example, `EntityID`, `Velocity`, `HealthPoints`, `NumberOfAttacks` properties.
Some other part of the game could then iterate through every instance of every object and update its properties.

    *Example*: During such an iteration, depending on the type of object (`Bullet` etc.), its movement is handled differently. (`Bullet`s fly forward, `Mob` AI is applied, etc.)

 2. **Decentralised**: Each class contains its own properties *and also* all the code for updating its own properties.

    *Example*: The `Bullet` has some kind of `Update()` method which the game engine calls periodically. This `Update` method would then take it upon itself to calculate a new `Velocity`, update it's position, etc.

Are there combinations of these or other alternatives I haven't thought of?


Which of these is the more commonly used approach in game programming? What are the benefits or disadvantages of these different methods?