какие утверждения верны относительно статических элементов класса
Статические члены класса
Класс – это тип, а не объект данных, и в каждом объекте класса имеется своя собственная копия данных – членов этого класса. Однако некоторые типы требуется реализовать так, что все объекты этого типа могут совместно использовать некоторые данные. Такие совместно используемые данные должны быть описаны как часть класса.
Статические данные относятся ко всем объектам класса. Такие данные используются, если
В этом случае в определение класса могут быть введены статические члены.
Такие члены классов называются статическими, и независимо от количества объектов данного класса, существует только одна копия статического элемента.
Обращение к статическому элементу осуществляется с помощью оператора разрешения контекста и имени класса:
ИмяКласса :: ИмяЭлемента
Если x – статическое член-данное класса cl, то к нему можно обращаться как
cl::x
При этом не имеет значения количество объектов класса cl.
Аналогично можно обращаться к статической член-функции:
Объявление статического члена в объявлении класса не является определением, то есть это объявление статического члена не обеспечивает распределения памяти и инициализацию.
Инициализация статических полей
Статические поля нельзя инициализировать в теле класса, а также в методах. Статические поля должны инициализироваться аналогично глобальным переменным в области видимости файла:
Статические члены класса. Не дай им загубить твой код
Давно хотел написать на эту тему. Первым толчком послужила статья Miško Hevery «Static Methods are Death to Testability». Я написал ответную статью, но так и не опубликовал ее. А вот недавно увидел нечто, что можно назвать «Классо-Ориентированное Программирование». Это освежило мой интерес к теме и вот результат.
Зависимости
Обычно, код зависит от другого кода. Например:
Теперь, такой пример:
normalizer_normalize — это функция пакета Intl, который интегрирован в PHP начиная с версии 5.3 и может быть установлен отдельно для более старых версий. Здесь уже немного сложнее — работоспособность кода зависит от наличия конкретного пакета.
Теперь, такой вариант:
Что-то знакомое.
Неправда ли, похоже на процедурный подход? Давайте попробуем переписать этот пример в процедурном стиле:
Классо-ориентированное программирование — это как покупка машины, для того чтобы сидеть в ней, периодически открывать и закрывать двери, прыгать на сидениях, случайно заставляя срабатывать подушки безопасности, но никогда не поворачивать ключ зажигания и не сдвинуться с места. Это полное непонимание сути.
Поворачиваем ключ зажигания
Теперь, давайте попробуем ООП. Начнем с реализации Foo :
Вы попросту не сможете использовать код, если хоть одно условие не удовлетворено.
Инъекция
Написать эту строчку можно в любом месте и она выполнится. Ее поведение зависит от глобального состояния подключения к БД. Хотя из кода это не очевидно. Добавим обработку ошибок:
Для сравнения, вот классо-ориентированная реализация:
Никакой разницы. Обработка ошибок — идентична, т.е. все также сложно найти источник проблем. Это все потому, что вызов статического метода — это просто вызов функции, который ничем не отличается от любого другого вызова функции.
Теперь мы удовлетворили все зависимости, которые обещали, все готово к запуску.
В процедурном коде, Вы создаете много жестких зависимостей и спутываете стальной проволокой разные участки кода. Все зависит от всего. Вы создаете монолитный кусок софта. Я не хочу сказать, что оно не будет работать. Я хочу сказать, что это очень жесткая конструкция, которую очень сложно разобрать. Для маленьких приложений это может работать хорошо. Для больших это превращается в ужас хитросплетений, который невозможно тестировать, расширять и отлаживать:
Классо-ориентированный подход выглядит обманчиво просто, но намертво приколачивает код гвоздями зависимостей. Объектно-ориентированный подход оставляет все гибким и изолированым до момента использования, что может выглядеть более сложным, но это более управляемо.
Статические члены
Зачем же нужны статические свойства и методы? Они полезны для статических данных. Например, данные от которых зависит экземпляр, но которые никогда не меняются. Полностью гипотетический пример:
Статические свойства также могут быть полезны, чтобы закешировать некоторые данные, которые идентичны для всех экземпляров. Статические свойства существуют, по большей части, как техника оптимизации, они не должны рассматриваться как философия программирования. А статические методы полезны в качестве вспомогательных методов и альтернативных конструкторов.
Использование статических методов допустимо при следующих обстоятельствах:
Это не создает никаких дополнительных зависимостей. Класс зависит сам от себя.
Слово об абстракции
Зачем вся эта возня с зависимостями? Возможность абстрагировать! С ростом Вашего продукта, растет его сложность. И абстракция — ключ к управлению сложностью.
Если код внутри этой функции будет выполнен — это значит, что экземпляр Database был успешно передан, что значит, что экземпляр объекта Database был успешно создан. Если класс Database спроектирован верно, то можно быть уверенным, что наличие экземпляра этого класса означает возможность выполнять запросы к БД. Если экземпляра класса не будет, то тело функции не будет выполнено. Это значит, что функция не должна заботиться о состоянии БД, класс Database это сделает сам. Такой подход позволяет забыть о зависимостях и сконцентрироваться на решении задач.
Классо-ориентированное программирование — глупость. Учитесь использовать ООП.
Вопросы по ООП C++
1)Сколько указателей могут указывать на один объект в рамках функции main?
Выберите один ответ:
a. Один
b. Ну, хорошо, три
c. Два
d. Сколько угодно
e. Указатель не для этого предназначен, он указывает на переменную базовог
2)Какое ограничение на количество параметризированных конструкторов в описании класса?
Выберите один ответ:
a. На количество параметризированных конструкторов в описании класса ограничений нет.
b. В описании класса допустимы только конструкторы по умолчанию и конструктор копии.
c. Параметризированных конструкторов в описании класса не должно быть.
d. Параметризированных конструкторов может быть не более десяти.
3)Какое наименование раздела можно явно не указывать в описании класса?
Выберите один ответ:
a. protected
b. public
c. private
4)Какие утверждения верны относительно возвращаемого значения функции?
Выберите один или несколько ответов:
a. Объект возвращается с помощью обычной инструкции return.
b. Возвращаемый объект всегда имеет спецификацию const.
c. Объект может быть в качестве возвращаемого значения функций.
d. Объект не может быть в качестве возвращаемого значения метода.
5)Какие утверждения верны, когда базовый класс наследуется по спецификатору public?
Выберите один или несколько ответов:
a. Закрытые элементы базового класса становятся закрытыми в производном.
b. Защищенные элементы базового класса становятся открытыми в производном классе.
c. Закрытые элементы базового класса становятся защищенными в производном.
d. Защищенные элементы базового класса становятся защищенными в производном классе.
e. Открытые элементы базового класса становятся открытыми в производном классе.
Помощь в написании контрольных, курсовых и дипломных работ здесь.
Вопросы по ООП С++
1)Правильно ли утверждение: алгоритм решения задачи системой содержит взаимодействия объектов.
вопросы ООП
Есть вопрос. Если кто знает, о чем тут, отпишитесь: «Пример, отражающий четыре способа применения.
ООП. Есть вопросы.
Собственно, обращаюсь к знающим людям, поскольку еще на первых порах с С++ не могу понять.
Когда вопросы кончаются, сделать кнопку неактивной и вывести сообщение о том, что вопросы кончились
Кто знает ребят подскажите в чем проблема, есть метод обновляющий текст в TextView (всего 6.
Классы
Статические элементы класса
Статические поля
Статические методы
Статические методы не могут быть константными ( const ) и виртуальными ( virtual ).
Дружественные функции и классы
Иногда желательно иметь непосредственный доступ извне к скрытым полям класса, то есть расширить интерфейс класса. Для этого служат дружественные функции и дружественные классы.
Дружественная функция
Дружественная функция может быть обычной функцией или методом другого ранее определенного класса. На нее не распространяется действие спецификаторов доступа, место размещения ее объявления в классе безразлично.
Дружественный класс
Функции f1 и f2 являются дружественными по отношению к классу hero (хотя и описаны без ключевого слова friend ) и имеют доступ ко всем его полям.
Объявление friend не является спецификатором доступа и не наследуется. Обратите внимание на то, что класс сам определяет, какие функции и классы являются дружественными, а какие нет.
Деструкторы
Имя деструктора начинается с тильды (
Если деструктор явным образом не определен, компилятор создает его автоматически.
Деструктор для рассматриваемого примера должен выглядеть так :
Перегрузка операций
Перегрузка операций осуществляется с помощью функций специального вида ( функций-операций ) и подчиняется следующим правилам:
Перегрузка унарных операций
Унарная функция-операция, определяемая внутри класса, должна быть представлена с помощью нестатического метода без параметров, при этом операндом является вызвавший ее объект, например:
Если функция определяется вне класса, она должна иметь один параметр типа класса:
Перегрузка бинарных операций
Бинарная функция-операция, определяемая внутри класса, должна быть представлена с помощью нестатического метода с параметрами, при этом вызвавший ее объект считается первым операндом :
Если функция определяется вне класса, она должна иметь два параметра типа класса:
Перегрузка операции присваивания
Операцию присваивания можно определять только в теле класса. Она не наследуется.
Перегрузка операции приведения типа
Можно определить функции-операции, которые будут осуществлять преобразование класса к другому типу. Формат:
Какие утверждения верны относительно статических элементов класса
Прошу, проверьте тест, ответы я выделила, только большая просьба сильно не ругаться и тапками не кидать, практически сплю уже за компом. Соображалка уже плохо работает У меня плохо с учебной литературой, а точнее ее практически отсутствием. Поэтому и прошу помощи. Буду очень признательна вам.
Вопрос 1
Какие типы свойств может содержать объект
1.основные стандартные базовые типы
2.структурированные свойства-массивы
3.объектные свойства
4.программные свойства
Вопрос 2
Какие заголовки методов класса MyClass при их программной реализации являются правильными в языке Delphi Pascal
1.constructor MyClass.Create
2.procedure MyClass.MyMethod(ax : real);
3.constructor MyClass:Create
4.constructor Create
Вопрос 3
Что определяет принцип инкапсуляции
объединение в рамках класса данных и программного кода обработки 1.этих данных
2.ограничение доступа к элементам класса
3.механизм взаимодействия объектов
4.правила обработки ошибочных ситуаций
Вопрос 4
Какие объявления пары перегруженных методов в языках С++ /Java/C# являются правильными
1.SomeMethod(int a); override;
SomeMethod(float a); override
2.SomeMethod( );
SomeMethod(int a)
3.SomeMethod(int a);
SomeMethod(float a)
4.SomeMethod(int a);
SomeMethod(int b)
Вопрос 5
Какие утверждения относительно понятия “перегрузка методов” являются правильными
1.перегрузка методов – это наличие в классе нескольких одноименных методов
2.перегруженные методы должны отличаться друг от друга числом или типом формальных параметров
3.перегружать разрешается только конструкторы
4.перегрузка методов реализована только в языке С++
Вопрос 7
Какие объявления конструкторов класса MyClass являются правильными в языке Delphi Pascal
1.constructor MyClass (ai : integer)
2.Create (ax : string); constructor
3.MyClass
4.constructor Create
Вопрос 8
Как реализуется создание объектов класса MyClass в языке Java
1.MyClass MyObject; MyObject = new MyClass( )
2.MyClass MyObject = new MyClass( )
3.MyClass *MyObject( )
4.MyClass *MyObject = new MyClass( )
Вопрос 9
Какие утверждения относительно методов-деструкторов являются правильными
1.деструктор отвечает за освобождение памяти, выделенной объекту
2.деструкторы реализованы не во всех объектных языках
3.класс может иметь несколько деструкторов
4.класс обязательно должен иметь деструктор
Вопрос 10
Какие утверждения относительно закрытых элементов класса являются правильными
1.закрытые элементы доступны только внутри класса
2.закрытые элементы задаются директивой private
3.закрытыми элементами обычно являются свойства класса
4.закрытыми элементами являются все методы класса
Вопрос 11
Какие утверждения относительно дочерних классов являются правильными
1.дочерний класс можно создавать на основе одного или нескольких родителей
2.на основе дочернего класса можно создавать свои дочерние классы
3.дочерние классы являются более функциональными, чем их родители
4.дочерние классы могут не включать в себя некоторые методы родителей
Вопрос 12
Какие уровни доступа могут иметь элементы классов
1.открытый (public)
2.защищенный (protected)
3.закрытый (private)
4.привилегированный (privileged)
Вопрос 13
Какое правило используется для установления наследственной связи между объектами
1.объект А есть разновидность объекта В
2.объект А есть часть объекта В
3.объекты А и В являются экземплярами одного и того же класса
4.объект А имеет право вызывать методы объекта В
Вопрос 14
Какие утверждения относительно механизма ограничения доступа к элементам классов являются правильными при использовании наследования
1.закрытые свойства родительского класса недоступны для прямого использования в дочерних классах
2.защищенные (protected) элементы родительского класса доступны для прямого использования только в дочерних классах
3.при создании нового класса можно использовать три уровня ограничения доступа: public/protected/private
4.закрытые элементы родительского класса можно сделать открытыми в дочерних классах
Вопрос 15
Какие преимущества дает использование принципа наследования и иерархий классов
1.возможность создания собственных классов на основе уже существующих
2.максимальное использование ранее созданного и отлаженного программного кода
3.простота внесения изменений в объектную программу
4.существенное уменьшение размеров объектных программ
Вопрос 16
Какие утверждения относительно базового класса самого верхнего уровня древовидной иерархии в языке Java являются правильными
1.этот класс имеет имя Object
2.любой нестандартный класс объектной программы будет прямым или косвенным потомком базового класса
3.класс содержит наиболее общие свойства и методы, наследуемые абсолютно любыми дочерними классами
4.имя этого класса обязательно надо указывать при определении новых классов
Вопрос 17
Какие утверждения относительно механизма инициализации свойств дочерних классов являются правильными
1.в первую очередь выполняется инициализация свойств родителей самого верхнего уровня
2.конструктор каждого дочернего класса должен вызывать конструктор своего родителя
3.для инициализации свойств создается цепочка вложенных вызовов конструкторов
4.инициализация всех свойств класса полностью выполняется конструктором класса
Вопрос 18
Какие утверждения относительно базового класса самого верхнего уровня древовидной иерархии в языке Delphi Pascal являются правильными
1.этот класс имеет имя TObject
2.любой нестандартный класс объектной программы будет прямым или косвенным потомком базового класса
3.класс содержит наиболее общие свойства и методы, наследуемые абсолютно любыми дочерними классами
4.имя этого класса обязательно надо указывать при определении новых классов
Вопрос 19
Какие утверждения относительно наследственной иерархии классов являются правильными
1.все классы в иерархии имеют что-то общее
2.каждый класс в иерархии имеет что-то уникальное
3.чем выше класс в иерархии, тем более общим он является
4.чем ниже класс в иерархии, тем более функциональным он является
Вопрос 20
Какие шаги надо сделать при создании нового дочернего класса при использовании наследования
[B]1.объявить в заголовке класса имя родительского класса
2.добавить в класс новые свойства и методы
3.в конструкторе класса предусмотреть вызов родительского конструктора[/B]
4.описать в классе унаследованные свойства и методы
Вопрос 21
Какие утверждения относительно динамической компоновки являются правильными
1.динамическая компоновка является основой механизма виртуальных методов
2.динамическая компоновка позволяет создавать легко изменяемые программы
3.динамический код содержит только часть необходимого программного кода
4.динамически компонуемый код выполняется быстрее статического
Вопрос 22
Какие утверждения относительно использования виртуальных методов в языке Java являются правильными
1.по умолчанию все методы класса считаются переопределяемыми
2.для объявления метода статическим используется директива final
3.для объявления метода виртуальным используется директива virtual
4.по умолчанию все методы класса считаются статическими
Вопрос 23
В чем проявляется принцип полиморфизма по отношению к объектным переменным
1.в возможности адресации одной переменной объектов разных классов
2.в возможности адресации одного объекта разными переменными
3.в возможности динамического подключения разных методов
4.в возможности объявления нескольких переменных с одним именем
Вопрос 24
Если задан родительский класс Parent и два его дочерних класса Child1 и Child2 и объявлены объектные переменные этих классов Par, Ch1 и Ch2 соответственно, то какие присваивания будут допустимыми с точки зрения механизма полиморфных указателей
1.Par = Ch1
2.Par = Ch2
3.Ch1 = Ch2
4.Ch1 = Par
Вопрос 25
Что может включать в себя описание класса динамического списка при объектной реализации контейнера
1.свойство-указатель на первый объект-элемент списка
2.конструктор для создания пустого контейнера
3.методы добавления и удаления объектов-элементов в контейнер
4.методы-итераторы для полиморфной обработки объектов контейнера
5.свойство-указатель на следующий элемент списка
Вопрос 26
Какие вызовы подпрограммы MyProc (Circle aCirc, Object aObj) с полиморфными параметрами являются правильными в языке Java
1.MyProc (MyCircle, MyRect)
2.MyProc (MyArc, MyLine)
3.MyProc (MyFig, MyCircle)
4.MyProc (MyLine, MyFig)
Вопрос 27
Какие утверждения относительно механизма переопределения методов являются справедливыми
1.переопределение методов является одним из проявлений принципа полиморфизма
2.переопределение методов реализуется с помощью динамической компоновки
3.переопределение методов необходимо для динамической настройки общеродовых методов
4.для описания переопределяемых методов используется понятие “виртуальный метод”
Вопрос 28
Какие утверждения относительно таблицы виртуальных методов являются правильными
1.таблица создается отдельно для каждого класса
2.таблица содержит адреса всех виртуальных методов класса
3.каждый объект имеет связь со своей таблицей
4.для объектной программы создается одна объединенная таблица
Вопрос 29
Что выполняет оператор is в языке Delphi Pascal
1.приведение родительского указателя к дочернему типу
2.проверку текущего динамического типа полиморфного указателя
3.ничего не выполняет
4.изменение динамического типа полиморфного указателя
Вопрос 30
Что может включать в себя описание класса элементов динамического списка как основы реализации контейнера
1.свойство-указатель на соседний элемент-объект списка
2.свойство – полиморфный указатель на связанный с элементом объект
3.конструктор для создания нового объекта-элемента списка
4.методы доступа к свойствам элемента списка
5.методы добавления и удаления элементов в список
Вопрос 32
Какие заголовки шаблонной функции являются правильными
1.template void MyTemplateFunction (T1 aParam)
2.template void MyTemplateFunction (T1 aParam1, T2 aParam2)
3.void MyTemplateFunction (T1 aParam) template
4. void MyTemplateFunction (T1 aParam)
Вопрос 33
Какие заголовки интерфейсных классов в языке Java являются правильными
1.interface IMyInter
2.interface INew extends IOld
3.interface IChild extends IParent1, IParent2
4.interface ISome implements IOther
Вопрос 34
Какие утверждения относительно понятия “обобщенный класс” в языке С++ являются справедливыми
1.при описании обобщенного класса не указывается конкретный тип свойств или параметров методов
2.замена обобщенного типа конкретным типом выполняется компилятором
3.при описании обобщенного класса можно использовать любое число обобщенных типов
4.замена обобщенного типа конкретным типом производится динамически при выполнении программы
Вопрос 35
В чем состоят отличия интерфейсных классов от абстрактных классов
1.абстрактные классы могут содержать программную реализацию некоторых методов
2.между абстрактными классами поддерживается только простое наследование
3.абстрактные классы могут содержать поля-свойства
4.на основе абстрактных классов можно создавать объекты-экземпляры
Вопрос 36
Какие классы библиотеки VCL реализуют важнейшие механизмы компонентной модели Borland Delphi?
1.TPersistent
2.TComponent
3.TException
4.TContainer
Вопрос 37
Какие утверждения справедливы относительно технологии DCOM?
1.технология используется в основном на платформе Windows
2.технология предназначена для создания распределенных приложений
3.технология основана на использовании глобального уникального идентификатора (GUID)
4.технология основана на использовании протокола взаимодействия объектов SOAP
Вопрос 38
Какие утверждения справедливы относительно обработки событий в модели Borland Delphi?
1.адрес функции-обработчика события сохраняется во внутреннем поле процедурного типа
2.существует несколько стандартных процедурных типов, отличающихся наборами параметров
3.с помощью объявления нестандартного процедурного типа можно реализовать обработку собственных событий
4.для основных типов событий предусмотрены стандартные классы
Вопрос 39
Какие утверждения относительно объектной реализации распределенных приложений являются справедливыми?
1.можно обращаться к методам объектов, реализованных на разных языках программирования
2.можно обращаться к методам объектов, физически расположенных на разных машинах
3.можно обращаться к методам объектов программ, выполняющихся под управлением разных операционных систем
4.можно обращаться только к методам тех объектов, которые находятся на одной машине
Вопрос 40
Какие утверждения относительно компонентных классов являются справедливыми?
1.компонентные классы оформляются по специальным правилам
2.компонентные классы предназначены для многократного использования в инструментах быстрого создания приложений
3.компонентные классы могут использоваться при создании распределенных приложений
4.компонентные классы никогда не включаются в общую библиотеку классов