Новые книги

Книга знакомит читателей с эффективными, но практически незаметными непосвященным способами успешной манипуляции людьми и рассматривает множество уловок, к которым прибегают в сфере торговли и рекламы. Книга адресована студентам — будущим психологам, практикующим психологам, а также всем, кто интересуется методами воздействия на сознание и законами взаимного влияния людей при общении.
Тамара Воротынцева – директор по развитию тренинговой компании «БИЗНЕС ПАРТНЕР» (Москва). Практикующий бизнес-тренер, автор книги «Строим систему обучения персонала» и публикаций в деловых изданиях России, Казахстана и Украины. Создатель интернет-рассылки: «E-mail переписка в бизнесе» на сервере subscribe.ru! Книга является практическим пособием для деловых людей, ведущих активную переписку с клиентами и партнерами. В ней представлены инструменты, которые помогут сделать электронное общение эффективным, оптимальным по времени и результату, максимально соответствующим нормам и правилам, принятым в современном деловом сообществе. Автор дает практические советы, иллюстрирует свои наблюдения случаями из жизни, приводит аргументированные выводы. Текст книги богат узнаваемыми примерами реальной деловой переписки. Автор делится своими наблюдениями, приемами, «хитростями», которые способны существенно повлиять на эффективность и результативность делового электронного письма. Если вы – деловой человек и для вас важно писать оперативно, лаконично, грамотно, в соответствии в правилами хорошего делового тона, – эта книга станет вам надежным помощником.

Реализация зависимостей

5.3.5. Реализация зависимостей

Зависимости в языке C++ реализуются с помощью указателей или с помощью специальных объектов. Например, зависимость "много-к-одному" между классами Item и Group реализована через указатели:

	class Item{
	public:
	  virtual void cut ();
	  virtual void move (Length deltax, Length deltay) = 0;
	  virtual Boolean pick (Length px, Length py) = 0;
	  virtual void ungroup () = 0;
	private:
	  Group* group;
	  friend Group::add_item (Item*);
	  friend Group::remove_item (Item*);
	public:
	  Group* get_group () {return group;};
	};
	class Group: public Item
	{
	public:
	  void cut ();
	  void move (Length deltax, Length deltay);
	  Boolean pick (Length px, Length py) = 0;
	  void ungroup () { };
	private:
	  ItemSet* items;
	public:
	  void add_item (Item*);
	  void remove_item (Item*);
	  ItemSet* get_items () {return items;}
	};

Каждый раз, когда к зависимости добавляется (или из нее удаляется) связь, оба указателя должны быть изменены:

	  void Group::add_item (Item* item)
	  {
	    item->group = this;
	    items->add (item);
	  }
	 
	  void Group::remove_item (Item* item);
	  {
	    item->group = 0;
	    items->remove (item);
	  }

Методы Group::add_item и Group::remove_item могут изменять приватные (private) атрибуты класса Item, хотя они определены в его подклассе Group, так как они определены как дружественные (friends) для класса Item.

В рассмотренном примере опущены проверки:

  1. не является ли включаемый в группу графический объект уже членом этой группы: в этом случае его незачем еще раз включать в группу;
  2. не является ли включаемый в группу графический объект членом какой-либо другой группы: в этом случае его нельзя включать в группу и необходимо выдать на экран соответствующее сообщение.

Иногда связанные между собой (зависимые) объекты включают в так называемые коллективные классы. В качестве примера такого класса рассмотрим класс ItemSet (набор объектов):

	class ItemSet
	{
	public:
	 ItemSet();           //создать пустой набор объектов
	 ~ItemSet();          //уничтожить набор объектов
	 void add(Item*);     //включить объект в набор
	 void remove(Item*);  //исключить объект из набора
	 Boolean includes(Item*);  //проверить наличие объекта в наборе
	 int size(Item*);     //определить количество объектов в наборе
	};

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

Зависимости между классами можно реализовать и с помощью специальных классов (каждый объект такого класса описывает связь между объектами соответствующих классов). В этом случае атрибуты класса соответствуют атрибутам описываемой им зависимости.

Назад | Содержание | Вперед