Какие имена заполнителей (foobars) использовать для типов, функций и переменных?

Для демонстрации концепции в c ++ мне нужно использовать некоторую схему именования заполнителей для типов, функций, переменных, например. Foobar. Имея несколько разных сущностей для именования и разграничения, заканчивая тем, что одни только foo / bar используются одновременно для классов, функций, переменные-члены визуально не различаются. Есть ли какая-нибудь полезная схема именования заполнителей для этих объектов?

enum Enum1 { ... }

struct Struct1 { ... }

class Class1
{
public:
void function1();
void function2();
...
private:
int variable1;
int variable2;
...
}

С одним только foo / bar для типов, функций и переменных различие не столь очевидно

enum Foo { ... }

struct Bar { ... }

class Foo
{
public:
void foo();
void bar();
void baz();
private:
int foo_;
int bar_;
}

2

Решение

Животные часто используются для иллюстрации объектно-ориентированного программирования. Они приходят с хорошим гомогенным и гетерогенным поведением (eat, bark) деревья отношений (Dalmatian это Dog, Dog имеет Tail), так далее.

Конечно, те же проблемы могут быть решены с помощью методов, не связанных с ООП … те же атрибуты полезны для иллюстрации взаимосвязи между динамическим полиморфизмом через виртуальные функции, специализацию шаблонов, адаптеры, enable-if, так далее.

2

Другие решения

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

Что касается меня, я обычно иду с foo/bar/moo/boo и т.д. Это делает работу довольно хорошо насколько пример достаточно короткий.

Если пример не является достаточно коротким, и дело в том, что подчеркивание типа (например, функции или, скажем, массива), кажется, облегчает читабельность, functionA/functionB можно использовать в качестве альтернативы — кажется, проще (чем с цифрами) читать и манипулировать такими именами в виду ИМХО. Числа могут отвлекать.

Другой способ (особенно хорошо подходит для обсуждения SQL-запросов, но может быть полезен и в некоторых случаях C ++) — использование примитивных реальных сущностей, таких как class Person а также class Employee как подкласс.

Если вы стремитесь продемонстрировать примеры ООП неспециалисту, Foo / Bar / Function1 в этом случае абсолютно не подходит: тогда только самые умные из ваших учеников поймут эту идею. Мой первый пример ООП был lightbulb с turn on а также turn off методы, isOn имущество, colour а также power свойства. Это может быть расширено fluorescent или incandescent lamp подкласс и инкапсулированы в desk lamp учебный класс. Если вы зайдете дальше в ООП и представите интерфейсы, он также может реализовать ac-powered и / или dc-powered интерфейсы.

Использование Foo / Bar и т. Д. Имеет значение только при общении с людьми с таким же или более высоким опытом, чем у вас — теми, кто уже полностью понимает язык (например, когда вы задаете вопрос типа «следует ли мне использовать» foo + bar или же foo.plus(bar)?» Добрый).

1