Главная страница
Навигация по странице:

  • Контрольные вопросы

  • Индивидуальные задания

  • Список литературы

  • Лабораторная работа 1 2 лабораторная работа 2 31 лабораторная работа 3 44 лабораторная работа 4 74


    Скачать 1.76 Mb.
    НазваниеЛабораторная работа 1 2 лабораторная работа 2 31 лабораторная работа 3 44 лабораторная работа 4 74
    Дата12.03.2021
    Размер1.76 Mb.
    Формат файлаdoc
    Имя файлаOOP_Lab_Rus.doc
    ТипЛабораторная работа
    #184105
    страница14 из 31
    1   ...   10   11   12   13   14   15   16   17   ...   31

    4.13 Статические элементы


    Иногда возникает необходимость определить элемент (член) класса так, чтобы появилась возможность пользоваться им независимо от какого-либо объекта этого класса. Обычно к элементам класса нужно обращаться только через объект этого класса. Однако можно создать элемент для использования без ссылки на определенный объект. Чтобы это сделать, укажите в начале его объявления ключевое слово static. Когда элемент объявляется как static, к нему можно обращаться до того, как создаются какие-либо объекты его класса, и без ссылки на какой-либо объект. Статическими можно объявлять как методы, так и переменные. Наиболее общим примером static-элемента является метод main(). Он объявляется как static, потому что должен вызваться прежде, чем будут созданы какие-либо объекты.

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

    Методы, объявленные как static имеют несколько ограничений:

    - могут вызывать только другие static-методы;

    - должны обращаться только к static-данным;

    - никогда не могут ссылаться на this или super.

    Для организации вычислений с целью инициализировать статические переменные можно объявить статический блок, который выполняется только один раз, когда класс впервые загружается. Следующий пример демонстрирует класс, который имеет статические методы, несколько переменных и блок инициализации:
    // Демонстрирует статические переменные, методы и блоки.

    class UseStatic {

    static int a = 3;

    static int b;

    static void meth(int x) {

    System.out.println("x = " + x);

    System.out.println("a = " + a);

    System.out.println("b = " + b);

    }

    static {

    System.out.println( "Статический блок инициализиройан. ");

    b = a * 4;

    }

    public static void main(String args[]) {

    meth(42);

    }

    }
    Все static-инструкции выполняются сразу же после загрузки класса usestatic. Сначала, в a устанавливается 3, затем выполняется static-блок (печатая сообщения), и наконец, b инициализируется значением а*4 или 12. Затем вызывается метод main(), который обращается к meth(), передавая 42 параметру х. Три оператора println() обращаются к двум static-переменным (a и b) и к локальной переменной х.

    Замечание. Внутри статического метода недопустимо обращаться к любым зкземплярным переменным.

    Вывод этой программы:
    Статический блок инициализиройан.

    x = 42

    a = 3

    b = 12
    Вне класса, в котором они определены, статические методы и переменные могут использоваться независимо от любого объекта. В этом случае для обращения к ним используются имена их класса и точечная операция. Например, если нужно вызвать static-метод вне его класса, можно воспользоваться следующей общей формой вызова:
    classname.methodname()
    Здесь classname — имя класса, в котором объявлен static-метод; methodname — имя статического метода. Нетрудно заметить, что этот формат подобен вызову нестатических методов через переменные, ссылающиеся на объект. К переменной static можно обращаться таким же образом — при помощи точечной операции с именем класса (в качестве левого операнда). Так Java реализует управляемую версию глобальных функций и глобальных переменных.

    Например:
    class StaticDemo {

    static int a = 42;

    static int b = 99;

    static void callme() {

    System.out.println("a = " + a);

    }

    }
    class StaticByName {

    public static void main(String args[]) {

    StaticDemo.callme () ;

    System.out.println("b = " + StaticDemo.b);

    }

    }
    Здесь внутри метода main о к статическому методу caiimeo и статической переменной ь обращаются вне их класса.

    Вывод этой программы:

    a = 42

    b = 99
    Контрольные вопросы

    1. Понятие инкапсуляции. Преимущества и недостатки.

    2. Концепция класса.

    3. Определение класса, общий вид и пример.

    4. Где находится объявление класса и реализация методов. Отличия от других языков.

    5. Отличие типа класса и объекта класса.

    6. Обращение к полям и методам класса.

    7. Имя класса и исходного файла, имя файла результата компиляции. Сходства и отличия.

    8. Объявление и создание объектов типа класс. Примеры.

    9. Операция динамического выделения, общий вид пример.

    10. Работа со ссылками. Отличие от других языков.

    11. Описание методов класса, общий вид и пример.

    12. Оператор возвращения значения метода, общий вид и пример.

    13. Аргументы и параметры, их понятия, сходство и отличия.

    14. Конструкторы, общий вид и пример. Сущность понятия.

    15. Обращение к объекту внутри объекта.

    16. Сокрытие переменных области видимости.

    17. Освобождение выделенных ресурсов.

    18. Завершение работы класса. Освобождение ресурсов.

    19. Спецификаторы и модификаторы методов, полей и их описание.

    20. Цели сокрытия данных и методов.
    Индивидуальные задания

    Вариант 1

    Описать класс, реализующий динамический стек. Написать программу, использующую этот класс для моделирования Т-образного сортировочного узла на железной дороге. Программа должна разделять на два направления состав, состоящий из вагонов двух типов (на каждое направление формируется состав из вагонов одного типа). Программа должна содержать меню, позволяющее осуществить проверку всех методов класса. Предусмотреть возможность формирования с клавиатуры.
    Вариант 2

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

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

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

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

    Составить описание класса для объектов-векторов, задаваемых координатами концов в трехмерном пространстве. Обеспечить операции сложения и вычитания векторов с получением нового вектора (суммы или разности), вычисления скалярного произведения двух векторов, длины вектора, косинуса угла между векторами. Написать программу, демонстрирующую работу с этим классом. Программа должна содержать меню, позволяющее осуществить проверку всех методов класса.
    Вариант 7

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

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

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

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

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

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

    Написать класс для эффективной работы со строками, позволяющий форматировать и сравнивать строки, реализовать быстрый поиск подстроки. Написать программу, демонстрирующую работу с этим классом. Программа должна содержать меню, позволяющее осуществить проверку всех методов класса.
    Вариант 14

    Описать класс «домашняя библиотека». Предусмотреть возможность работы с произвольным числом книг, поиска книги по какому-либо признаку (например, по автору или по году издания), добавления книг в библиотеку, удаления книг из нее, сортировки книг по разным полям. Написать программу, демонстрирующую работу с этим классом. Программа должна содержать меню, позволяющее осуществить проверку всех методов класса.
    Вариант 15

    Описать класс «записная книжка». Предусмотреть возможность работы с произвольным числом записей, поиска записи по какому-либо признаку (например, по фамилии, дате рождения или номеру телефона), добавления и удаления записей, сортировки по разным полям. Написать программу, демонстрирующую работу с этим классом. Программа должна содержать меню, позволяющее осуществить проверку всех методов класса.
    Вариант 16

    Описать класс «студенческая группа». Предусмотреть возможность работы с переменным числом студентов, поиска студента по какому-либо признаку (например, по фамилии, дате рождения или номеру телефона), добавления и удаления записей, сортировки по разным полям. Написать программу, демонстрирующую работу с этим классом. Программа должна содержать меню, позволяющее осуществить проверку всех методов класса.
    Вариант 17

    Описать класс, реализующий тип данных «вещественная матрица» и работу с ними. Класс должен реализовывать следующие операции над матрицами:

    • сложение, вычитание, умножение, деление (+, -, *, /) (умножение и деление, как на другую матрицу, так и на число);

    • операции сравнения на равенство/неравенство;

    операцию транспонирования матрицы;

    • методы, реализующие проверку типа матрицы (квадратная, диагональная, нулевая, единичная, симметрическая, верхняя треугольная, нижняя треугольная);

    • операции ввода/вывода в стандартные потоки.

    Написать программу, демонстрирующую работу с этим классом. Программа должна содержать меню, позволяющее осуществить проверку всех методов класса.
    Вариант 18

    Описать класс «множество целых чисел», позволяющий выполнять основные операции – добавление и удаление элемента, пересечение, объединение и разность множеств. Написать программу, демонстрирующую работу с этим классом. Программа должна содержать меню, позволяющее осуществить проверку всех методов класса.
    Вариант 19

    Описать класс, реализующий дек. Написать программу, использующую этот класс для сортировки данных и отыскания заданного элемента. Программа должна содержать меню, позволяющее осуществить проверку всех методов класса.
    Вариант 20

    Описать класс «предметный указатель». Каждый компонент указателя содержит слово и номера страниц, на которых это слово встречается. Количество номеров страниц, относящихся к одному слову, от одного до десяти. Предусмотреть возможность формирования указателя с клавиатуры, вывода указателя, вывода номеров страниц для заданного слова, удаления элемента из указателя. Написать программу, демонстрирующую работу с этим классом. Программа должна содержать меню, позволяющее осуществить проверку всех методов класса.
    Список литературы

    1. Шилдт Г. Полный справочник по Java SE6, 2007.

    2. Эккель Б. Философия Java, 2009.

    3. Ноутон П., Шилдт Г. - Java 2. Наиболее полное руководство, 2007.

    4. Павловская Т.А., Щупак Ю.А. C++. Объектно-ориентированное программирование, 2006.

    5. Буч Г. Объектно-ориентированное проектирование с примерами применения М.: Конкорд, 1992.
    1   ...   10   11   12   13   14   15   16   17   ...   31


    написать администратору сайта