Автор работы: Пользователь скрыл имя, 25 Мая 2015 в 16:08, курсовая работа
В рамках моделирования сборки компьютера из составных частей использование объектно-ориентированного подхода ставит, своей целью обеспечить структурирование, которое повысит характеристики надежности, в то же время сохраняя простоту изменения программной составляющей проекта.
В первой главе будут рассмотрены основные понятия, связанные со сборкой компьютеров, основные составляющие персонального компьютера и их роли.
Процесс разработки объектной модели включает в себя описание моделируемых предметов в упрощенной форме, выделение атрибутов и методов полученных классов, а так же упрощение полученных структур, с использованием механизма наследования.
В разделе о реализации объектной модели будет описаны основные моменты в процессе получения демонстрационной программы с использованием созданной ранее иерархии классов
В качестве реализации в виде программного кода, за основу будет использован язык программирования C++.
Введение…………………………………………………………………………………3
Глава 1. Анализ и описание предметной области проекта………………………….5
Глава 2. Разработка объектной модели……………………………………………....13
2.1 Определение объектов и классов………………………………………………….13
2.2 Подготовка словаря данных………………………………………………………13
2.3 Определение атрибутов объектов………………………………………………..16
2.4 Определение методов классов………………..…………………………………..19
2.5 Упрощение классов при использовании наследования и графическое изображение объектной модели……………………………………………………….20
Глава 3. Реализация объектной модели на языке программирования С++………22
Заключение………………………………………………………………………………30
Глоссарий……………………………………………………………………………….32
Список использованных источников…………………………………………………34
Устройство чтения карт памяти или картридер – PCcardreader: Марка – name, наименование фирмы производителя и модель; Стоимость – price, стоимость компонента; Разъем – slot, интерфейс подключения картридера; Длина кабеля – cablelen, длина шлейфа или кабеля картридера; Тип карты – cardstype, тип карты, которую можно считывать с помощью картридера.
Клавиатура – PCkeyboard: Марка – name, наименование фирмы производителя и модель; Стоимость – price, стоимость компонента; Разъем – slot, тип гнезда на материнской плате, к которому подключается клавиатура; Длина кабеля – cablelen, кабель подключения клавиатуры; Количество клавиш – keynumber, число клавиш установленных на клавиатуре, как правило, установлено 104 клавиши.
Мышь – PCmouse: Марка – name, наименование фирмы производителя и модель; Стоимость – price, стоимость компонента; Разъем – slot, тип гнезда на материнской плате, к которому подключается мышь; Длина кабеля – cablelen, кабель подключения мыши; Тип сенсора – sensortype, указание способа считывания параметров перемещения устройства, с помощью светового излучения или механический способ; Количество кнопок – buttonnumber, количество кнопок мыши, как правило 3 шт., встречаются и мыши с дополнительными кнопками, например 5 или 7 кнопок; Количество колес – wheelnumber, имеется ввиду число колес прокрутки, как правило, одно или два, для горизонтальной или вертикальной прокрутки.
Монитор – PCmonitor: Марка – name, наименование фирмы производителя и модель; Стоимость – price, стоимость компонента; Разъем – slot, тип гнезда на видео плате, к которому подключается монитор; Дисплей – display, указание типа дисплея, сейчас наиболее известны следующие типы матриц: TN, PVA, IPS
Принтер – PCprinter: Марка – name, наименование фирмы производителя и модель; Стоимость – price, стоимость компонента; Разъем – slot, тип гнезда на материнской плате, к которому подключается принтер; Тип чернил – inktype, тип расходных материалов для печати, может быть использована струйная или лазерная печать на бумаге; Формат печати – format, указание на максимальный размер печатаемого листа в принтере, как правило А4.
Сканер – PCscanner: Марка – name, наименование фирмы производителя и модель; Стоимость – price, стоимость компонента; Разъем – slot, тип гнезда на материнской плате, к которому подключается сканер; Длина кабеля – cablelen, длина кабеля поставляемого вместе со сканером; Тип сканера – scantype, вариант исполнения сканера, бывают планшетные сканеры и компактные сканеры для ручного сканирования; Разрешение – resolution, разрешающая способность сканера, измеряется в точках на дюйм
Помимо рассмотренных основных свойств объектов, для реализации подбора конфигурации компьютера, необходимо добавить в каждый объект следующие свойства: selected – указание на то, участвует ли данная деталь в сборке компьютера, и следовательно, учитывать ли её параметры при определении характеристик производительности и стоимости компьютера; parttype – цифровой индикатор типа рассматриваемого объекта, поскольку для хранения будет использован единый формат ссылок на базовый класс, то для определения конкретного объекта необходимо хранить его идентификатор, от этого зависит, сколько свойств необходимо подготовить для объекта и какие типы этих свойств.
2.4 Определение методов классов
Поскольку в данной работе рассматриваются однотипные компоненты, поэтому методы для работы с ними можно описать в общем виде, для всех классов сразу.
Рассмотрим перечень методов, которые будут описаны для реализации вышеописанных объектов: Конструктор с параметрами – по имени класса, например PCram(). Выполняет инициализацию свойства объекта при его создании с использованием указанных параметров; Деструктор – по имени класса, например ~PCram(). Выполняет освобождение памяти строковых переменных, которая была выделена конструктором; Процедура изменения свойств – edit(). Выполняет изменение свойств уже готового объекта, на значения переданные в процедуру; Процедура вывода свойств – print(). Поскольку классы проектируются с использованием методов инкапсуляции, то свойства, как правило, не доступны вне объекта. Для получения значений свойств с целью вывода их на экран будет предназначена данная функция; Процедура задания типа объекта при создании – setparttype(). Позволит во время создания объекта конкретного класса, установить цифровой идентификатор, который потом можно получить, используя базовый класс; Функция получения типа объекта во время работы с ним – number(). Возвращает значение указывающее на тип используемого объекта; Процедура установки флага выбора объекта – setselection(). Изменяет флаг участия компонента в сборке компьютера на переданное значение; Функция получения статуса объекта по отношению к сборке компьютера – getselection(). Если деталь участвует в сборке компьютера, функция возвращает истину, иначе ложь; Функция вычисления коэффициента производительности – quality(). Необходимо разработать функции для каждого представителя рассматриваемых компьютерных частей, которая учитывая различные параметры детали, будет возвращать процент производительности, от максимально возможного для данной детали.
2.5 Упрощение классов при использовании наследования и графическое изображение объектной модели
В рассмотренной в пункте 2.3 схеме свойств классов очевидна избыточность данных. Так же в пункте 2.4 было замечено, что многие функции для всех объектов совпадают. Следовательно, необходимо выделить базовый класс – Pcpart – и перенести в него все общие для всех классов методы и свойства.
Так же для упрощения структуры необходимо разделить устройства по типу и выделить три дополнительных класса: PCmemory – класс запоминающих устройств, PCoutput – класс устройств вывода, PCinput – класс устройств ввода. И заключить в них общие для этих классов свойства и методы.
Полученная схема иерархии классов и распределения свойств и методов, представлена на рис. 2.5.1.
Рассмотрим реализацию описания классов описанных на рис. 2.5.1 с использованием объектно-ориентированного подхода языка С++.
При описании классов будут использоваться механизмы наследования, а так же операторы уровня доступности свойств и методов.
В главе 2 был выбран путь реализации конструкторов классов с параметрами. Поэтому в данном описании отсутствуют конструкторы без параметров, в связи с отсутствием необходимости.
Как было сформулировано во введении данной работы одна из целей проектирования структуры классов, это упрощение модели, за счет отсечения избыточной информации.
Вначале описывается базовый класс PCpart. Здесь описываются общие для всех наследников свойства: марка, индекс типа детали, стоимость и флаг выбора. Свойства доступны только внутри класса PCpart на это указывает служебное слово private. Метод установки индекса типа детали, предназначен для однократного вызова при создании детали, и объявлен в зоне protected, это означает, что после закрытого наследования, он перейдет в секцию private наследника. Общедоступные методы и конструкторы описаны в зоне public. Это процедура вывода значений полей в список строк, процедура изменения флага выделения, функция считывания значения флага выделения, функция получения индекса типа объекта, процедура редактирования, конструктор с параметрами и деструктор.
class PCpart {
private:
char *name;
int parttype;
int price;
bool selected;
protected:
void setparttype(int ptype);
public:
void print(TStringList *outlist);
void setselection(bool sel);
bool getselection();
int number();
void edit(char *n, int prc);
PCpart(char *n, int prc);
~PCpart();
};
Описание класса корпуса PCcase. Данный класс получается путем закрытого наследования базового класса PCpart. Здесь и далее соблюдается простое правило, свойства класса описаны в зоне private, методы и конструкторы в зоне public, поэтому больше не будем заострять на этих моментах внимание.
Здесь дополнительно добавлены свойства: тип корпуса, формфактор, количество посадочных гнезд для жесткого диска и компакт-диска. Из-за измененного количества свойств в этом классе и последующих классах перегружаются методы print и edit. Так же, поскольку данный класс представляет конечное устройство, а не промежуточный или базовый класс, здесь введен метод quality, который должен возвращать процент производительности, от максимальной для данной группы устройств, который вычисляется в зависимости от значений характеристик устройства. Поскольку характеристики у всех объектов отличаются как минимум на одно свойство, в каждом последующем классе, который представляет конечное устройство, будет представлена своя версия функции quality.
class PCcase : private PCpart {
private:
char *type;
char *mbformat;
int hddslot,cdslot;
public:
int quality();
void print(TStringList *outlist);
void edit(char *n, int prc, char *t, char *mbf, int hds, int cds);
PCcase(char *n, int prc, char *t, char *mbf, int hds, int cds);
~PCcase();
};
Класс блока питания PCpsu, добавляет свои свойства: мощность и количество разъемов для жестких дисков. Принцип модификации, по сравнению с базовым классом аналогичен классу PCcase рассмотренному выше.
class PCpsu : private PCpart {
private:
int power;
int hddslot;
public:
int quality();
void print(TStringList *outlist);
void edit(char *n, int prc, int pw, int hdds);
PCpsu(char *n, int prc, int pw, int hdds);
~PCpsu();
};
Класс материнской платы PCmb, добавляет больше всего свойств, в сравнении с остальными классами. Это связано, с тем, что все остальные устройства подключаются к материнской плате, поэтому на ней установлено множество различных разъемов. И при выборе материнской платы руководствуются типом гнезд и их количеством, от этого зависит поддерживаемое оборудование и потенциал наращиваемой мощности. Полный список свойств класса материнской платы представлены в пункте 2.3. Принцип модификации, по сравнению с базовым классом аналогичен классу PCcase рассмотренному выше.
class PCmb : private PCpart {
private:
char *format;
char *cpusocket;
char *memorytype;
char *hddtype;
char *videoslot;
int memoryslot;
int hddslot;
int pci;
int pciex1;
int pciex16;
int usb;
int ps2;
public:
int quality();
void print(TStringList *outlist);
void edit(char *n, int prc, char *frmt, char *cpus, char *memt, char *hddt, char *vids, int ms, int hds, int pc, int pce1, int pce16, int us, int p2);
PCmb(char *n, int prc, char *frmt, char *cpus, char *memt, char *hddt, char *vids, int ms, int hds, int pc, int pce1, int pce16, int us, int p2);
~PCmb();
};
Класс центрального процессора PCcpu, добавляет свои свойства: гнездо процессора, тактовая частота, число ядер Принцип модификации, по сравнению с базовым классом аналогичен классу PCcase рассмотренному выше.
class PCcpu : private PCpart {
private:
char *cpusocket;
int speed;
int cores;
public:
int quality();
void print(TStringList *outlist);
void edit(char *n, int prc, char *cpus, int sp, int cor);
PCcpu(char *n, int prc, char *cpus, int sp, int cor);
~PCcpu();
};
Класс PCmemory является групповым классом и предназначен для уменьшения дублирования информации общей для группы запоминающих устройств. Здесь перегружена функция setparttype, для изменения её уровня видимости с private на protected. Класс описывает дополнительно общие свойства: разъем памяти, объем информации, скорость чтения и скорость записи. У класса PCmemory два наследника, это PCram и PChdd.
class PCmemory : private PCpart {
private:
char *slot;
int volume;
int speedread;
int speedwrite;
protected:
void setparttype(int ptype) {PCpart::setparttype(ptype);};
public:
int quality();
void print(TStringList *outlist);
void edit(char *n, int prc, char *sl, int vol, int spr, int spwr);
PCmemory(char *n, int prc, char *sl, int vol, int spr, int spwr);
~PCmemory();
};
Класс оперативной памяти PCram добавляет свойства: тактовая частота памяти и число сторон заполненных чипами. В остальном принцип модификации, аналогичен классу PCcase рассмотренному выше.
class PCram : private PCmemory {
private:
int memspeed;
int sides;
public:
int quality();
void print(TStringList *outlist);
void edit(char *n, int prc, char *sl, int vol, int spr, int spwr, int mems, int sid);
PCram(char *n, int prc, char *sl, int vol, int spr, int spwr, int mems, int sid);
~PCram();
};
Класс жесткого диска PChdd добавляет свойство: тип жесткого диска. В остальном принцип модификации, аналогичен классу PCcase рассмотренному выше.
class PChdd : private PCmemory {
private:
char *type;
public:
int quality();
void print(TStringList *outlist);
void edit(char *n, int prc, char *sl, int vol, int spr, int spwr, char* tp);
PChdd(char *n, int prc, char *sl, int vol, int spr, int spwr, char* tp);
~PChdd();
};
Класс устройств ввода PCinput устроен по принципу рассмотренного выше класса PCmemory. Добавлены свойства разъема подключения и длины кабеля устройства и так же перегружен метод setparttype. Класс PCinput имеет 5 наследников: PCkeyboard, PCmouse, PCscanner, PCcdrom, PCcardreader.
class PCinput : private PCpart {
private:
char *slot;
int cablelen;
protected:
void setparttype(int ptype) {PCpart::setparttype(ptype);};
public:
int quality();
void print(TStringList *outlist);
void edit(char *n, int prc, char *sl, int clen);
PCinput(char *n, int prc, char *sl, int clen);
~PCinput();
};
Класс клавиатуры PCkeyboard добавляет свойство: число клавиш клавиатуры. В остальном принцип модификации, аналогичен классу PCcase рассмотренному выше.
class PCkeyboard : private PCinput {
private:
int keynumber;
public:
int quality();
void print(TStringList *outlist);
void edit(char *n, int prc, char *sl, int clen, int keyn);
PCkeyboard(char *n, int prc, char *sl, int clen, int keyn);
~PCkeyboard();
};
Класс компьютерной мыши PCmouse добавляет свойства: сенсор, число кнопок и число колес. В остальном принцип модификации, аналогичен классу PCcase рассмотренному выше.
class PCmouse : private PCinput {
private:
char *sensortype;
int buttonnumber;
int wheelnumber;
public:
int quality();
void print(TStringList *outlist);
void edit(char *n, int prc, char *sl, int clen, char *senst, int buttn, int wheeln);
PCmouse(char *n, int prc, char *sl, int clen, char *senst, int buttn, int wheeln);
~PCmouse();
};
Класс сканера PCscanner добавляет свойства: тип сканера, разрешение. В остальном принцип модификации, аналогичен классу PCcase рассмотренному выше.
class PCscanner : private PCinput {
private:
char *scantype;
int resolution;
public:
int quality();
void print(TStringList *outlist);
void edit(char *n, int prc, char *sl, int clen, char *scant, int resol);
PCscanner(char *n, int prc, char *sl, int clen, char *scant, int resol);
~PCscanner();
};
Класс оптического дисковода PCcdrom добавляет свойства: тип поддерживаемых дисков, множитель скорости привода. В остальном принцип модификации, аналогичен классу PCcase рассмотренному выше.
Информация о работе Моделирование оптимальной конфигурации компьютера