| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Общие вопросы > Пара вопросов по ООП |
| Автор: zero50x 5.5.2014, 08:25 | ||
| Только начал ООП. Тренируюсь на системе с планируемыми объектами: человек с его личным счётом, банк, магазин. Вопросы: 1. Т.к. счёта это однотипные объекты решил сделать для них класс и работать с ними как его экземплярами. Это нормально что при наличии нескольких тысяч пользователей будет несколько тыс. экземпляров этого класса? 2. Пополняется счёт в банке, а тратится в магазине, но вот методы я что-то никак не могу придумать, кто подскажет или наведёт на мысль? 3. Т.к. магазинов много и они тоже однотипные для них я так понимаю тоже рационально создать свой класс, а магазины - это его объекты? 4. Банк только один (единственный экземпляр). Для такого объекта имеет смысл создавать класс с 1 экзепляром или лучше обойтись как-то по другому?
|
| Автор: Aliance 5.5.2014, 10:52 |
| Если банк только один - имеет смысл реализовать его как Singleton (см. ссылку по шаблонам проектирования). По поводу комментария выше, что банковские счета бывают разных типов - на помощь придет наследование (абстрактный класс базового счета и конкретные реализации счетов). И еще, не стоит называть свой класс именем встроенной функции php (count). |
| Автор: baldina 5.5.2014, 13:50 | ||||||
php приложение в конкретный момент времени будет работать со счетами только одного (текущего) клиента, их редко будет больше одного, больше десяти - практически никогда. методология ООП проектирования, в двух словах, такова: 1. производим декомпозицию задачи на объекты. 2. определяем, какими сообщениями обмениваются объекты (перечень функций) и какова их семантика 3. классифицируем объекты, выявляя общие свойства/методы, в результате получается иерархия классов не нужно придумывать методы только ради того, чтобы они были. они естественным образом вытекают из анализа задачи. если упростить задачу до одного вида счета, то я вижу три функции: - синхронизировать объект с БД, эта же функция используется в конструкторе - выдать состояние счета - перевести деньги на другой счет можно движение средств осуществлять и двумя функциями - операциями по дебиту и кредиту, но врядли объект php является первоисточником информации, скорее всё в БД и логике над ней, а на php только интерфейсная часть. тогда, т.к. списывание со счета связано с начислением на (другой) счет, операция должна быть атомарной (транзакцией), и логично иметь одну функцию. со счетом, кстати, должна быть ассоциирована история движения средств
|
| Автор: zero50x 7.5.2014, 08:18 |
| Всё понял что вы сказали, спасибо, в голове прояснилось немного. Про шаблоны проектирования на википедии посмотрю. Оффтоп: что-то не пойму, я вроде подписывался на сообщения в теме а на почте не было ничего. |