Что представляют классы?

На самом деле в системе бывают классы 2-ух видов:[1] классы, которые прямо отражают понятия области приложения, т.е. понятия, которые употребляет конечный юзер для описания собственных задач и вероятных решений; и[2] классы, которые являются продуктом самой реализации, т.е. отражают понятия, применяемые разработчиками и программерами для описания методов реализации.Некие из Что представляют классы? классов, являющихся продуктами реализации, могутпредставлять и понятия реального мира. К примеру, программные иаппаратные ресурсы системы являются неплохими кандидатамина роль классов, представляющих область приложения. Это отражаеттот факт, что систему можно рассматривать с нескольких точекзрения, и то, что с одной является деталью реализации, сдругой может быть понятием области приложения. Хорошоспроектированная система должна Что представляют классы? содержать классы, которыедают возможность рассматривать систему с логическиразных точек зрения. Приведем пример: [1] классы, представляющие пользовательские понятия (к примеру, легковушки и грузовики), [2] классы, представляющие обобщения пользовательских понятий (передвигающиеся средства), [3] классы, представляющие аппаратные ресурсы (к примеру, класс управления памятью), [4] классы, представляющие системные ресурсы (к примеру, выходные потоки), [5] классы, применяемые для реализации Что представляют классы? других классов (к примеру, списки, очереди, блокировщики) и [6] интегрированные типы данных и структуры управления.В огромных системах очень тяжело сохранять логическое разделениетипов разных классов и поддерживать такое разделение междуразличными уровнями абстракции. В приведенном выше перечислениипредставлены три уровня абстракции: [1+2] представляет пользовательское отражение системы, [3+4] представляет машину, на которой будет Что представляют классы? работать система, [5+6] представляет низкоуровневое (со стороны языка программирования) отражение реализации.Чем больше система, тем большее число уровней абстракции необходимодля ее описания, и тем сложнее определять и поддерживать эти уровниабстракции. Отметим, что таким уровням абстракции есть прямоесоответствие в природе и в разных построениях человеческогоинтеллекта. К примеру, можно рассматривать дом как объект,состоящий Что представляют классы? из [1] атомов, [2] молекул, [3] досок и кирпичей, [4] полов, потолков и стенок; [5] комнат.Пока удается хранить раздельно представления этих уровней абстракции,можно поддерживать целостное представление о доме. Но, еслисмешать их, возникнет абракадабра. К примеру, предложение"Мой дом состоит из нескольких тыщ фунтов углерода, некоторыхсложных полимеров, из 5000 кирпичей, 2-ух Что представляют классы? ванных комнат и 13потолков" - очевидно абсурдно. Из-за абстрактной природыпрограмм схожее утверждение о какой-нибудь сложной программнойсистеме далековато не всегда воспринимают как абракадабру. В процессе проектирования выделение понятий из области приложенияв класс совсем не является обычный механической операцией. Обычноэта задачка просит большой проницательности. Заметим, что самипонятия области приложения являются абстракциями. К Что представляют классы? примеру, вприроде не есть "налогоплательщики", "монахи" либо "сотрудники".Эти понятия не что другое, как метки, которыми обозначают беднуюличность, чтоб систематизировать ее по отношению к некоторойсистеме. Нередко реальный либо воображаемый мир (к примеру, литература,в особенности фантастика) служат источником понятий, которые кардинальнопреобразуются при переводе их в классы. Так Что представляют классы?, экран моего компьютера(Маккинтош) совершенно не походит на поверхность моего стола, хотякомпьютер создавался с целью воплотить понятие "настольный" Ь,а окна на моем мониторе имеют самое отдаленное отношение кприспособлениям для презентации чертежей в моей комнате.Ь Я бы не вынес такового кавардака у себя на дисплее. Сущность моделирования действительности Что представляют классы? не в преданном следовании тому,что мы лицезреем, а в использовании действительности как начала для проектирования,источника вдохновения и как якоря, который держит, когдастихия программирования угрожает лишить нас способностипонимания собственной своей программки. Тут полезно предостеречь: новеньким обычно тяжело "отыскивать"классы, но скоро это преодолевается без каких-либонеприятностей. Дальше обычно приходит Что представляют классы? шаг, когда классы и отношениянаследования меж ними бесконтрольно умножаются. Тут ужевозникают трудности, связанные со сложностью, эффективностью иясностью приобретенной программки. Далековато не каждую отдельную детальследует представлять отдельным классом, и далековато не каждоеотношение меж классами следует представлять как отношениенаследования. Пытайтесь не забывать, что цель проекта - смоделироватьсистему с подходящим уровнем детализации и подходящим Что представляют классы? уровнемабстракции. Для огромных систем отыскать компромисс меж простотой иобщностью далековато не обычная задачка.

Иерархии классов

Разглядим моделирование транспортного потока в городке, цель которогодостаточно точно найти время, требующееся, чтоб аварийные движущиесясредства достигнули пт предназначения. Разумеется, нам нужно иметьпредставления легковых и грузовых машин, машин скорой помощи,различных пожарных и полицейских машин, автобусов Что представляют классы? и т.п.Так как всякое понятие реального мира не существует изолированно,а соединено бессчетными связями с другими понятиями,появляется такое отношение как наследование. Не разобравшись в понятияхи их обоюдных связях, мы не в состоянии понять никакое отдельноепонятие. Также и модель, если не отражает дела междупонятиями, не может Что представляют классы? правильно представлять сами понятия. Итак, внашей программке необходимы классы для представления понятий, но этогонедостаточно. Нам необходимы методы представления отношений меж классами.Наследование является массивным методом прямого представленияиерархических отношений. В нашем примере, мы, по всей видимости,сочли бы аварийные средства особыми передвигающимися средствамии, кроме этого, выделили бы средства, выставленные легковыми игрузовыми машинами Что представляют классы?. Тогда иерархия классов заполучила бы таковой вид: движущееся средство легковушка аварийное средство грузовая машинаполицейская машина машина скорой помощи пожарная машинамашина с выдвижной лестницейЗдесь класс Emergency представляет всю информацию, нужную длямоделирования аварийных передвигающихся средств, к примеру: аварийнаямашина может нарушать некие правила движения, она имеетприоритет на перекрестках, находится под контролем диспетчераи Что представляют классы? т.д.На С++ это можно задать так: class Vehicle { /*...*/ }; class Emergency { /* */ }; class Car : public Vehicle { /*...*/ }; class Truck : public Vehicle { /*...*/ }; class Police_car : public Car , public Emergency { //... }; class Ambulance : public Car , public Emergency { //... }; class Fire_engine : public Truck , Emergency { //... }; class Hook_and_ladder : public Fire_engine { //... }; Наследование Что представляют классы? - это отношение самого высочайшего порядка, которое прямопредставляется в С++ и употребляется в большей степени на раннихэтапах проектирования. Нередко появляется неувязка выбора: использоватьнаследование для представления дела либо предпочесть емупринадлежность. Разглядим другое определение понятия аварийногосредства: движущееся средство считается аварийным, если ононесет соответственный световой сигнал. Это позволит упроститьиерархию классов, заменив класс Emergency Что представляют классы? на член классаVehicle: движущееся средство (Vehicle {eptr}) легковушка (Car) грузовая машина (Truck)полицейская машина (Police_car) машина скорой помощи (Ambulance) пожарная машина (Fire_engine) машина с выдвижной лестницей (Hook_and_ladder)Сейчас класс Emergency употребляется просто как член в тех классах,которые представляют аварийные передвигающиеся средства: class Emergency { /*...*/ }; class Vehicle Что представляют классы? { public: Emergency* eptr; /*...*/ }; class Car : public Vehicle { /*...*/ }; class Truck : public Vehicle { /*...*/ }; class Police_car : public Car { /*...*/ }; class Ambulance : public Car { /*...*/ }; class Fire_engine : public Truck { /*...*/ }; class Hook_and_ladder : public Fire_engine { /*...*/ }; Тут движущееся средство считается аварийным, если Vehicle::eptrне равно нулю. "Обыкновенные" легковые и грузовые машины инициализируютсяVehicle Что представляют классы?::eptr равным нулю, а для других Vehicle::eptr должно бытьустановлено в ненулевое значение, к примеру: Car::Car() // конструктор Car { eptr = 0; } Police_car::Police_car() // конструктор Police_car { eptr = new Emergency; } Такие определения упрощают преобразование аварийного средства вобычное и напротив: void f(Vehicle* p) { delete p->eptr; p->eptr Что представляют классы? = 0; // больше нет аварийного передвигающегося средства //... p->eptr = new Emergency; // оно появилось опять } Так какой вариант иерархии классов лучше? В общем случае ответ таковой:"Наилучшей является программка, которая более конкретно отражаетреальный мир". Другими словами, при выборе модели мы должны стремитьсяк большей ее"действительности", но с учетом неминуемых ограничений,накладываемых требованиями Что представляют классы? простоты и эффективности. Потому,невзирая на простоту преобразования обыденного передвигающегося средства ваварийное, 2-ое решение представляется непрактичным.Пожарные машины и машины скорой помощи - этодвижущиеся средства специального предназначения со специальноподготовленным персоналом, они действуют под управлением команддиспетчера, требующих специального оборудования для связи. Такоеположение значит, что принадлежность к аварийным передвигающимся средствам -это базисное понятие, которое для Что представляют классы? улучшения контроля типов иприменения разных программных средств должно быть прямопредставлено в программке. Если б мы конструировали ситуацию, в которойназначение передвигающихся средств не настолько точно,скажем, ситуацию, в какой личный транспорт временами используетсядля доставки специального персонала к месту происшествия, а связьобеспечивается при помощи портативных приемников, тогда мог быоказаться подходящим и Что представляют классы? другой метод моделирования системы. Для тех, кто считает пример моделирования движения транспортаэкзотичным, имеет смысл сказать, что в процессе проектированияпочти повсевременно появляется схожий выбор меж наследованиеми принадлежностью. Аналогичный пример есть в $$12.2.5, гдеописывается свиток (scrollbar) - прокручивание инфы в окне.
chto-opravdanie-oznachalo-v-biblejskie-vremena.html
chto-osobennogo-privnosit-pianist.html
chto-otkril-dostoevskij-v-bednih-lyudyah-statya.html