Getters and setters aren't necessary to OO. They're one OO-compatible way to implement data access control. Inheritance is not about where you store the state, but behavior polymorphism. Factories are also not about where to store state, but about dependency injection. (Arguably they are not the right way to do it but one thing we can say for sure is that they are not there to solve the problem of where to store state.)