метод. к лаб. работам (ООП). Основы языка java
Скачать 205 Kb.
|
Лабораторная работа №3Тема: Интерфейсы и абстрактные классы Цель работы:Изучить и освоить механизм создания иерархической структуры классов. Изучить и освоить особенности разработки, наследования и применения интерфейсов. Порядок выполнения работы:Ориентируясь на вариант задания: Разработать иерархию классов и интерфейсов заданной предметной области; Для каждого класса и интерфейса разработать состав полей (констант для интерфейсов) и методов, руководствуясь основными принципами объектно-ориентированного проектирования; Определить, какими модификаторами доступа должны быть помечены все классы, поля и методы; Разработать совокупность конструкторов для всех классов из иерархии, желательно, чтобы классы реализовывали минимум один из разработанных интерфейсов; Освоить использование ключевых слов super и this в конструкторах и методах классов; Разработать реализацию одноименных методов в классах иерархии, освоить перегрузку и замещение методов; В разработанных методах реализовать определение, инициализацию, создание и использование объектов ссылочного типа (классов, импортируемых из пакетов JRE, классов собственной разработки). Требования к содержанию отчета:Отчет готовится в электронном виде и должен содержать: цель работы; описание разработанной иерархии классов и интерфейсов заданной предметной области; листинги классов и интерфейсов; документацию, подготовленную с использованием утилиты javadoc; выводы и заключение. Контрольные вопросы (примерный перечень):Что делает операция new? Может ли переменная иметь тип «интерфейс»? Что такое поле класса? Чем оно отличается от поля объекта? Что такое сигнатура метода? А контракт метода? Что такое интерфейс? Что можно сделать при помощи переменной super? В чем отличие результата применения модификатора final к классу и к переменной? Что такое абстрактный метод? Будет ли ошибка выдана компилятором, если класс реализует два интерфейса, имеющих методы с одинаковой сигнатурой? Чем абстрактный класс отличается от интерфейса? Что делает конструктор класса? Должен ли он обязательно явно присутствовать в объявлении класса? Какие в существуют виды ссылочных типов? Как реализуются ссылочные переменные? Как переменные различных видов передаются в качестве параметров методам? Что можно сделать при помощи переменной this? Что такое элементы класса и элементы экземпляра класса, чем они отличаются друг от друга? Как нужно указывать, что переменная или метод является элементом класса, а не экземпляра? Для чего используются модификаторы доступа? Какие существуют модификаторы доступа, как они ограничивают доступ к элементам? Что позволяет делать процесс наследования? Что такое суперкласс и подкласс? Как ведут себя строковые переменные при передаче их в качестве параметров? Что такое повторное использование кода? Что такое скрытие переменной, затемнение переменной и замещение метода? Как импортировать классы из пакетов? Как использовать явные ссылки на классы из пакетов? Как добавить класс в пакет? Варианты заданияРазработать иерархию классов «Отрезок», «Квадрат», «Куб». Реализовать методы задания и доступа и изменения параметров объектов этих классов. Задать интерфейсный объект, который умеет графически отображать в 3D эти объекты в задаваемых ракурсе и областях своего рабочего окна (сдвиг и повороты). Разработать иерархию классов «Данное», «Байт» - целое число размера 1 байт, «Слово» - целое число размера 4 байта, «Число» - вещественное число в 8 байт. Разработать класс «FIFO буфер заданной длины», позволяющий записывать данные указанных типов в произвольном порядке, обеспечивая контроль переполнения, и извлекать их по указанной процедуре обслуживания, обеспечивая контроль наличия. Разработать иерархию и протоколы классов «Квадрат», «Ромб», «Прямоугольник» и «Параллелограмм». Определить методы для изменения размеров, расчета периметра и площади фигур. Реализовать иерархию классов, представляющих геометрические фигуры - окружность, ромб, параллелограмм, трапецию, треугольник. Реализовать методы вычисления площади, периметра, длины ребер, диаметров вписанной и описанной окружности. В качестве основы иерархии описать интерфейс или абстрактный класс Figure, являющийся абстракции геометрической фигуры. Необходимо реализовать следующие методы -вычисление площади, периметра, высоты, длины ребер(для многоугольников), радиуса, диаметра (для окружности), медиан, биссектрис. Для указания вершин использовать координаты декартовой системы координат. Предусмотреть конструкторы с параметрами. Реализовать иерархию классов представляющих собой абстракцию организационной структуры предприятия. Разработать следующие классы – «Человек», «Сотрудник», «Подразделение», «Должность», соответствующие следующим требованиям: Класс «Человек» должен обладать как минимум следующими свойствами - фамилия, имя, отчество, дата рождения, пол. Класс «Сотрудник» должен расширять класс «Человек» обладать как минимум следующими свойствами – подразделение, должность, зарплата. Для сотрудника, должны быть доступны прием и увольнение на работу. Классы подразделения должны иметь иерархическую структуру, то есть каждое подразделение может иметь главное и подчиненные подразделение. Должны быть доступны ввод/вывод подразделения организации. Спроектировать и реализовать классы, для операций над банковскими счетами – банковский счет, владелец счета, история операций. Должны быть доступны следующие операции: депонирование некоторой суммы на счет; снятие некоторой суммы со счета; передача суммы с одного счета на другой; открытие счета и закрытие счета; получение истории операций; регистрация клиента; получение баланса по счету; формирование сводной информации по всем счетам; Реализовать иерархию классов для склада. Реализовать классы «Склад», «Товар», «Покупатель», «Поставщик». Должны быть реализованы следующие функции: добавление единицы товара; отпуск товара покупателю; получение информации о доступных позициях товара; получение информации о наличии товара на складе; группировка товаров по видам; получение информации по поставщикам; получение информации по покупателям; Создать базовый класс Car (машина), характеризуемый торговой маркой (строка), числом цилиндров, мощностью. Определить методы переназначения и изменения мощности. Создать производный класс Lorry (грузовик), характеризуемый также грузоподъемностью кузова. Определить функции переназначения марки и изменения грузоподъемности. Создать класс Liquid (жидкость), имеющий поля названия и плотности. Определить методы переназначения и изменения плотности. Создать производный класс Alcohol (спирт), имеющий крепость. Определить методы переназначения и изменения крепости. Создать класс Pair (пара чисел); определить методы изменения полей и вычисления произведения чисел. Определить производный класс Rectangle (прямоугольник) с полями−сторонами. Определить методы вычисления периметра и площади прямоугольника. Создать класс Man (человек), с полями: имя, возраст, пол и вес. Определить методы переназначения имени, изменения возраста и изменения веса. Создать производный класс Student, имеющий поле года обучения. Определить методы переназначения и увеличения года обучения. Создать класс Triad (тройка чисел); определить методы изменения полей и вычисления суммы чисел. Определить производный класс Triangle с полями−сторонами. Определить методы вычисления углов, вычисления периметра и площади треугольника. Создать производный класс Equilateral (равносторонний). Создать производный класс RightAngled (прямоугольный). Студент, преподаватель, персона , заведующий кафедрой Служащий, персона , рабочий, инженер Рабочий, кадры, инженер, администрация Деталь, механизм, изделие, узел Организация, страховая компания, нефтегазовая компания, завод Журнал, книга , печатное издание, учебник Тест, экзамен, выпускной экзамен, испытание Место, область, город, мегаполис Игрушка , продукт, товар, молочный продукт Квитанция, накладная, документ, счет Автомобиль, поезд, транспортное средство, экспресс Двигатель, двигатель внутреннего сгорания, дизель, реактивный двигатель Республика , монархия, королевство, государство Лабораторная работа №4 Тема: Обработка строк. Использование регулярных выражений Цель работы: Изучить и освоить механизм создания строк, используя стандартные классы String, StringBuilder и StringBuffer. Изучить и освоить особенности разработки и применения регулярных выражений. Порядок выполнения работы: Ориентируясь на вариант задания: Разработать иерархию классов и интерфейсов; Для каждого класса и интерфейса разработать состав полей (констант для интерфейсов) и методов, руководствуясь основными принципами объектно-ориентированного проектирования; Разработать и реализовать совокупность классов для решения поставленной задачи: Символ, Слово, Знак препинания и др. Во всех задачах заменять табуляции и последовательности пробелов одним пробелом. Требования к содержанию отчета: Отчет готовится в электронном виде и должен содержать: цель работы; описание разработанной иерархии классов и интерфейсов заданной предметной области; листинги классов и интерфейсов; документацию, подготовленную с использованием утилиты javadoc; выводы и заключение. Контрольные вопросы (примерный перечень): Как объявляются и инициализируются строки в языке Java? Какие виды параметров могут быть заданы в конструкторах класса String? Как определяется длина строки и как выполняется конкатенация строк в языке Java? Как выполняется размещение строки в объекте класс StringBuffer? Какие конструкторы определены для класса StringBuffer? Как определяется и устанавливается емкость буферной памяти и длина строки для объекта класса StringBuffer? Какие методы сравнения строк определены в классе String? Какие методы класса String выполняют поиск в строках? Какие методы извлечения строк и подстрок из строки определены в классе String? Какие методы модификации строк определены в классе String? Как в Java можно создать строки из примитивных типов? Какие методы модификации строк определены в классе StringBuffer? Какие типы символов можно задавать в шаблоне регулярного выражения? Как определяется операция альтернации в шаблоне регулярного выражения? Как задать любой одиночный символ в шаблоне регулярного выражения? Как действуют квантификаторы "+", "*" и "?" в шаблоне регулярного выражения? Как задается точное число повторений символа в шаблоне регулярного выражения? Как задается класс символов в шаблоне регулярного выражения? Как задаются классы символов с помощью специальных символов в шаблоне регулярного выражения? Какие анкеры можно задать в шаблоне регулярного выражения? Как задается группировка символов и как захватываются символы в шаблоне регулярного выражения? Как задается группировка символов без захвата в шаблоне регулярного выражения? Как задается группировка символов с «заглядыванием вперед» в шаблоне регулярного выражения? Как задается группировка символов с «заглядыванием назад» в шаблоне регулярного выражения? Что содержит и как создается объект класса Pattern в Java? Какие флажки и какими способами можно задать в шаблоне регулярного выражения в Java? Какие методы определены для класса Pattern в Java, и какие действия они выполняют? Что содержит и как создается объект класса Match в Java? Какие операции с регионами определены в классе Match в Java, и какие действия они выполняют? Какие методы поиска соответствия определены в классе Match в Java, и какие действия они выполняют? Какие методы замены определены в классе Match в Java, и какие действия они выполняют? В каких случаях генерируется исключение класса PatternSyntaxException и какие методы определены в этом классе? Какие методы работы с регулярными выражениями определены в классе String в Java, и какие действия они выполняют? Каков формат определения метода в Java? Как задается тип возвращаемого значения в определении метода в Java? Для каких целей используется предложение return в Java? Как определяются перегруженные методы в Java и как они задаются? Какие модификаторы можно задать для методов в Java? Задания к лабораторной работе Задача 1 Написать регулярное выражение, определяющее является ли данная строка строкой "abcdefghijklmnopqrstuv18340" или нет. – пример правильных выражений: abcdefghijklmnopqrstuv18340. – пример неправильных выражений: abcdefghijklmnoasdfasdpqrstuv18340. Написать регулярное выражение, определяющее является ли данная строка GUID с или без скобок. Где GUID это строчка, состоящая из 8, 4, 4, 4, 12 шестнадцатеричных цифр разделенных тире. – пример правильных выражений: e02fd0e4-00fd-090A-ca30-0d00a0038ba0. – пример неправильных выражений: e02fd0e400fd090Aca300d00a0038ba0. Написать регулярное выражение, определяющее является ли заданная строка правильным MAC-адресом. – пример правильных выражений: aE:dC:cA:56:76:54. – пример неправильных выражений: 01:23:45:67:89:Az. Написать регулярное выражение, определяющее является ли данная строчка валидным URL адресом. В данной задаче правильным URL считаются адреса http и https, явное указание протокола также может отсутствовать. Учитываются только адреса, состоящие из символов, т.е. IP адреса в качестве URL не присутствуют при проверке. Допускаются поддомены, указание порта доступа через двоеточие, GET запросы с передачей параметров, доступ к подпапкам на домене, допускается наличие якоря через решетку. Однобуквенные домены считаются запрещенными. Запрещены спецсимволы, например «–» в начале и конце имени домена. Запрещен символ «_» и пробел в имени домена. При составлении регулярного выражения ориентируйтесь на список правильных и неправильных выражений заданных ниже. – пример правильных выражений: http://www.example.com, http://example.com. – пример неправильных выражений: Just Text, http://a.com. Написать регулярное выражение, определяющее является ли данная строчка шестнадцатиричным идентификатором цвета в HTML. Где #FFFFFF для белого, #000000 для черного, #FF0000 для красного и т.д. – пример правильных выражений: #FFFFFF, #FF3421, #00ff00. – пример неправильных выражений: 232323, f#fddee, #fd2. Написать регулярное выражение, определяющее является ли данная строчка датой в формате dd/mm/yyyy. Начиная с 1600 года до 9999 года. – пример правильных выражений: 29/02/2000, 30/04/2003, 01/01/2003. – пример неправильных выражений: 29/02/2001, 30-04-2003, 1/1/1899. Написать регулярное выражение, определяющее является ли данная строчка валидным E-mail адресом согласно RFC под номером 2822. – пример правильных выражений: user@example.com, root@localhost – пример неправильных выражений: bug@@@com.ru, @val.ru, Just Text2. Составить регулярное выражение, определяющее является ли заданная строка IP адресом, записанным в десятичном виде. – пример правильных выражений: 127.0.0.1, 255.255.255.0. – пример неправильных выражений: 1300.6.7.8, abc.def.gha.bcd. Проверить, надежно ли составлен пароль. Пароль считается надежным, если он состоит из 8 или более символов. Где символом может быть английская буква, цифра и знак подчеркивания. Пароль должен содержать хотя бы одну заглавную букву, одну маленькую букву и одну цифру. – пример правильных выражений: C00l_Pass, SupperPas1. – пример неправильных выражений: Cool_pass, C00l. Проверить является ли заданная строка шестизначным числом, записанным в десятичной системе счисления без нулей в старших разрядах. – пример правильных выражений: 123456, 234567. – пример неправильных выражений: 1234567, 12345. Есть текст со списками цен. Извлечь из него цены в USD, RUR, EU. – пример правильных выражений: 23.78 USD. – пример неправильных выражений: 22 UDD, 0.002 USD. Проверить существуют ли в тексте цифры, за которыми не стоит «+». – пример правильных выражений: (3 + 5) – 9 × 4. – пример неправильных выражений: 2 * 9 – 6 × 5. Создать запрос для вывода только правильно написанных выражений со скобками (количество открытых и закрытых скобок должно быть одинаково). – пример правильных выражений: (3 + 5) – 9 × 4. – пример неправильных выражений: ((3 + 5) – 9 × 4 Задача 2 1 Удалить из предложения все слова, содержащие заданный символ. 2 Все лексемы во введенной строке вывести в обратном порядке. 3 Увеличение кода каждого символа на константу и вывод новой строки. Константа вводится с клавиатуры. 4 Подсчитать сумму длин лексем во введенном предложении и вывести полученную величину. 5 Распечатать слова из введенного предложения, у которых либо буквы упорядочены по алфавиту, либо каждая буква входит в слово не менее двух раз (т.е. слова типа BEER, ABBA). 6 Распечатать введенную строку, удалив из неe лексемы с нечетными номерами и перевернув лексемы с четными номерами. 7 Сдвиг во введенной строке четных символов на 2 позиции вправо. Сдвиг полагать кольцевым. 8 Поиск самого длинного слова в строке и вывод этого слова в обратном порядке. 9 Поменять в лексемах введенного предложения буквы местами (парно). 10 Поменять в лексемах введенного предложения буквы на нечетных позициях с прописных на строчные. 11 Дано предложение. Все нечетные лексемы перевернуть и вывести новое предложение. 12 Дано предложение. Определить, является ли числовая последовательность из длин слов неубывающей. 13 Вводится строка, содержащая цифры и символы. Подсчитать и вывести сумму квадратов всех чисел в исходной строке. 14 Распечатать в порядке, обратном алфавитному, вес буквы, которые входят в текст не менее трех раз. 15 Вводится строка, содержащая цифры и символы. Подсчитать и вывести сумму всех чисел в исходной строке. 16 Замена во введенной строке S лексемы a на лексему b. Лексемы a и b вводятся с клавиатуры. 17 Дано предложение. Вывести все слова заданной длины. 18 Замена в каждой лексеме введенной строки первого символа на второй. 19 Удалить из предложения все символы, стоящие на четных позициях в лексемах. 20 Подсчитать суммы кодов символов лексем во введенном предложении и проверить, является ли полученный числовой ряд невозрастающей последовательностью. 21 Поиск самого короткого слова в строке и вывод количества повторений его в исходной строке. 22 Подсчет числа слов во введенном предложении. Полагать, что слова разделяются пробелами, число пробелов между словами - произвольное. 23 Во введенном предложении поменять все символы местами (парно) 24 Дана строка и символ. Подсчитать число вхождений символа в нечетных лексемах. 25 Вывести число повторений введенной лексемы в строке. Строка вводится с клавиатуры. 26 Подсчет в предложении числа слов с четными количеств букв и с нечетным количеством букв. 27 Распечатать, начиная с последнего, перевёрнутые слова введенного предложения. 28 Вводится две строки. В первой строке все буквы сделать прописными, во второй - заменить символ 'a' на 'b'. Вывести строку, полученную в результате слияния преобразованных строк. 29 Из введенной строки удаляем все вхождения лексемы. Лексема вводится с клавиатуры. 30 Удалить из предложения все пробелы между лексемами. Вывести новое предложение. 31 Во введенной строке найти самое длинное симметричное слово и вывести его. 32 По заданному натуральному числу определить и вывести его последнюю и первую цифры. |