2015-03-19 2 views
0

Этот вопрос может показаться открытым, но я не уверен, где и как еще просить об этом. При написании объектно-ориентированного кода необходимо определить объекты, методы и свойства, связанные с тем, что они пишут. Мне очень трудно это сделать и так Мне интересно, есть ли программное обеспечение или какой-то шаблон, который там, чтобы помочь мне с этим.Как определить объекты, их методы и свойства?

Например, если мой объект является Car несколько методов могут быть .engineStart(), .closeDoor(doorNumber) и несколько свойств могут быть color, make, licensePlateNumber.

У кого-нибудь есть формат или техника, которые они используют для идентификации всех объектов, методов и свойств до, они действительно начинают кодирование?

ответ

0

Класс должен обрабатывать один аспект системы, который будет построен в контексте выбранного дизайна.

Интерфейс должен быть минимальным (без сахара и функций удобства). Это означает, что если вы можете реализовать прецедент с подмножеством интерфейса, функция, которая понимала бы, что используемый случай не должен быть функцией-членом.

Пример:

class Foo 
{ 
    public: 
    void TurnLeft(uint32_t radians); 
    void TurnRight(uint32_t radians); 
    // Bad - interface not minimal and this is a convenience function. 
    void TurnLeftThenRight(uint32_t radiansLeft, uint32_t radiansRight); 
}; 

Класс должен быть абстракцией сортов. Это означает, что он не должен требовать всех деталей реализации класса и полного понимания всех его требований, используемых для его реализации при использовании класса. Правильное использование класса должно быть проще, чем его реализация.

Класс не должен просто «экспортировать» все состояние, которое он инкапсулирует с помощью свойств, поскольку тогда это не будет абстракция, а просто группа данных.

Для практического использования класса он сделает предположения о контексте, в котором он находится, и об общей архитектуре. (Threading, политики использования памяти, использование стека (рекурсии да/нет), исключения да/нет, ...). Попытка рассчитать все это из класса или превратить его в монстра с несколькими параметрами шаблона обычно не является оптимальной стратегией для программирования приложений.

Реализация класса должна иметь единичный тест и некоторую форму документации о его ограничениях и допущениях.

Методы классов должны быть реализованы в защитном стиле. То есть перед фазой оптимизации и настройки класс должен проверять входные аргументы и, если возможно, также свои выходные аргументы и указывать на его ограничения.

-1

Ну, когда вы начинаете кодирование, вам нужно определить, что должно быть связано с чем. Смысл, я знаю, что у меня есть машина со всеми этими свойствами. Поэтому мне нужен класс автомобиля со следующими свойствами: цвет, марка, номер плиты, пробег газа. Теперь я хочу знать, насколько этот автомобиль средний. Я могу сделать функцию в классе автомобиля специально для объекта, который может быть вызван для генерации цены, основанной на параметрах, которые я вводил ИЛИ, по свойствам самого объекта.

Это может не помочь или иметь смысл, но по вашему коду вы увидите, когда и где использовать классы.

+0

Я хотел бы идентифицировать все мои объекты, прежде чем начинать кодирование, а не во время. –

+0

Определение до и во время создания тех же результатов. Вам просто нужно решить, что представляет ваш объект и какие его свойства нужно определить. Планирование - это замечательно, но вы всегда сможете добавлять и удалять функциональность по ходу дела. Поэтому вы задаете широкий и очень индивидуалистический вопрос. – iore

+0

Я не согласен с вами в том, что функциональность изменится по мере моего кода. Тем не менее, мы можем ограничить количество изменений, ошибок и улучшить общее качество кода, если мы определим все, что мы можем перед вами. _Вы гораздо чаще избегаете грабежа банка, если вы планируете свой гейст, чем если вы хотите импровизировать, когда идете ._ –

0

Когда вы думаете о дизайне вашей программы принять во внимание:

классов, методов и данных, необходимых.

Отношения между классами и между ними.

Как будет храниться информация и т.д.

Так что попробуйте сделать очень подробное описание вашей программы и что вы хотите это сделать. Затем запустите свое описание и выберите определенные существительные и глаголы, которые помогут вам указать такие объекты, как объекты, атрибуты и методы. Отсюда вы можете увидеть, как вы могли бы организовать свои классы и данные. Старайтесь не делать один класс слишком сложным или слишком маленьким.

Не уверен, что это то, что вы хотели, но я надеюсь, что смогу помочь.

+0

Так вы сказали бы, что существительные в моем описании могут быть объектами? Object = noun, Methods = verb? –

+0

Несомненно. Таким образом, возможно, что единственные существительные могут быть базовыми классами, представляющими объекты. В этом классе вы можете определить его атрибуты. Тогда любые глаголы, которые могут быть полезны, могут быть помещены как методы в пределах этих классов соответствующим образом. –

+0

Еще одна вещь, скажем, у меня есть класс «Лампа». У лампы, очевидно, есть лампочка. Если бы кто-то должен был создать отдельный класс для лампочки, было бы разумнее наследовать от класса лампы EX: ('class LightBulb наследует от Lamp') или создать отдельный класс для« Bulb »без наследования? –

Смежные вопросы