АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Рекомендации по проектированию классов

Читайте также:
  1. II. Рекомендации по оформлению контрольной работы.
  2. III. МЕТОДИЧЕСКИЕ РЕКОМЕНДАЦИИ СТУДЕНТАМ ПО ПОДГОТОВКЕ К СЕМИНАРУ
  3. Вступление. Общие рекомендации.
  4. Выводы и рекомендации
  5. для учащихся 7 классов
  6. ЗАДАЧИ И ОБЩИЕ РЕКОМЕНДАЦИИ К ОБСЛЕДОВАНИЮ.
  7. И добросовестно выполняйте все мои рекомендации. Успех вам га-
  8. Классовый и стратификационный подходы к изучению социальной структуры.
  9. Классы (fstream, ofstream, ifstream, ostream, istream, ios) и представители классов потокового ввода-вывода.
  10. Классы и классовые отношения»
  11. Количество классов
  12. Кольцо классов вычетов

1. Определитесь, какому понятию соответствует проектируемый класс. Максимально точно охарактеризуйте это понятие. Например: прямоуголник на плоскости со сторонами, параллельными осям (прямоугольной!) системы координат.

2. Определите минимальный набор независимых свойств данного понятия, который достаточен для полного и однозначного описания соответствующего понятию объекта. Например, для класса «(плоский) треугольник» это могут быть:

а) три стороны;

б) две стороны и угол между ними;

в) одна сторона и два прилежащих к ней угла.

Выберите один из этих наборов свойств. Ни в коем случае их не смешивайте — свойства должны быть независимыми!

3. Каждому такому свойству будет соответствовать одно (и только одно) поле класса. Определитесь с его типом и поместите соответствующее поле в private-область. Принято говорить, что совокупность значений всех полей определяет состояние объекта.

Поля класса никогда не хранят информацию о состоянии двух или более объектов (данного класса) одновременно!

4. Часто бывает удобно обеспечить внешний доступ к некоторым полям класса. Это делается с помощью специальных методов, неформально именуемых «getter-ами» и «setter-ами». Например, если в вашем классе имеется поле по имени length (длина), то в public-область вы могли бы поместить следующие методы:

...

public:

void setLength(float len){length = len;}

float getLength() const {return length;}

...

5. На первый взгляд может показаться, что это излишнее усложнение — помещать поле в часть private, а потом все равно писать в public’е целых два метода, которые, по сути, обеспечивают к нему доступ, эквивалентный public. Не лучше ли сразу поместить это поле в часть public?

Нет, не лучше[1].

6. Иногда бывает удобнее сделать один setter сразу на несколько полей вместо того, чтобы писать по одному setter’у на каждое из них. Так, для класса «треугольник» было бы логично написать:

void setEdges(float a, float b, float c){...}

или

void setAngles(float alpha, float beta, float gamma){...}

7. Подобно setter’у с несколькими параметрами, часто бывает удобно создать конструктор с несколькими параметрами. Подумайте, какие свойства объекта вам, скорее всего, часто захочется задавать при его создании, и напишите соответствующий конструктор с параметрами. Очевидные кандидаты на такие конструкторы для класса «треугольник» перечислены в а), б) и в) в п.2. Причем уместны будут все три варианта одновременно (независимо от конкретного способа хранения состояния объекта!).

8. Не забудьте про конструктор по умолчанию. Он пригодится при создании массивов объектов, а также при создании «неинициализированных» объектов. Обычно такой конструктор записыает нули[2] в числовые поля класса, и пустые строки в поля строковые. Иногда (для целей отладки) в строковые поля бывает полезно записать что-то типа «default». В любом случае, конструктор по умолчанию должен оставлять после себя объект в непротиворечивом состоянии (например, стороны треугольника должны иметь такую длину, чтобы вообще складываться в треугольник, а сумма углов должна равняться 180 градусам).

9. Не откладывая в долгий ящик, только покончив с конструкторами, сразу напишите своему классу деструктор. Как правило, задача деструктора — освободить всю динамическую память, которая была выделена в конструкторе (а также во время всей последующей жизни объекта).

10. Вернемся к понятиям. Помимо набора свойств, для понятий часто бывают характерны также некоторые операции над ними (вернее, над предметами, обозначенными данным понятием). Простейшими операциями являются:

· получение и установка отдельных свойств объекта;

· конструирование объекта;

· печать состояния объекта на экране;

· ввод состояния объекта с клавиатуры.

11. Внимательно подумайте, какие операции характерны для данного понятия (операции в жизни, а не в программировании!) и добавьте в класс соответствующие им методы. Например, для треугольника сами собой напрашиваются следующие:

· вычисление периметра;

· вычисление площади;

· масштабирование (пропорциональное увеличение или уменьшение всех сторон);

· вычисление радиуса описанной окружности;

· вычисление радиуса вписанной окружности;

· приведение площади треугольника к единичной.

12. Если метод класса производит действия, не являющиеся операцией над данным объектом (this) — такого метода там быть не должно!

Примеры неправильных методов:

· вывод на экран меню для пользователя;

· печать на экране массива объектов;

· поиск в массиве объектов.

13. Внимание! Классы предназначены для повторного использования. Поэтому методы класса:

· все исходные данные для своей работы берут из своих входных параметров или из соответствующего объекта класса (this);

· результат своей работы — возвращают при помощи оператора return или записывают в соответствующий объект класса (this).

С пользователем, сидящим за клавиатурой, методы классов не взаимодействуют![3]


Поиск по сайту:



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.004 сек.)