Тематический план

  • Инструменты ООП (1 неделя)

    • Файл icon
    • Гиперссылка icon

      Прочитать главу 1. Своими руками написать, скомпилировать и запустить все примеры из учебника. Убедиться, что у вас все работает, и вы понимаете каждую строчку. Выполнить приведенное ниже практическое задание.

    • Задание:

      Напишите свое первое приложение. Выведите на экран компьютера текст из двух строк:

      Привет, мир!
      Меня зовут: <ваше имя>.

  • Синтаксис Java (2 неделя)

    • Гиперссылка icon

      Прочитать главы 2 и 3. Выполнить упражнения по ссылке ниже. Подготовить вопросы на лекцию!

    • Гиперссылка icon

      Выполните все упражнения до темы "Java Loops" включительно. Упражнения, которые не сможете с первого раза выполнить на сайте, с нуля запрограммируйте у себя не компьютере! Не ленитесь - когда начнём программировать классы, времени на разборки с синтаксисом уже не будет. 

  • Базовые понятия ООП (3 неделя)

    • Файл icon
    • Теория:

      1. Что такое сущность?
      2. Что такое объект?
      3. Что такое свойства объекта?
      4. Что такое методы объекта?
      5. Что такое инкапсуляция?
      6. Что такое класс?
      7. Что такое экземпляр класса?
      8. Как выглядит общая форма определения класса?
    • Гиперссылка icon

      Прочитать главу 4 "Введение в классы, объекты, методы". Разобрать данные в книге примеры. Выполнить приведенные ниже практические задания.

    • Практика:

      1. Опишите объект "комлексное число" в виде класса Complex. Свойства, важные для абстракции, определите самостоятельно.
      2. Создайте экземпляр класса. Заполните все свойства данными. Выведите на экран строку, содержащую комплексное число в виде a+bi..
      3. Создайте два разных экземпляра класса. Заполните их разными данными. Выведите оба числа на экран.
      4. Создайте две переменные одного класса. В первую переменную создайте экземпляр класса. А во вторую переменную просто присвойте первую. Убедитесь, что обе переменных "содержат" одну и ту же информацию.
      5. Напишите метод, выводящий комплексное число на экран. Вызовите для двух разных чисел.
      6. Напишите метод, возвращающий модуль комплексного числа. Выведите на экран модули для двух разных чисел.
      7. Напишите метод, принимающий целое число. Сравните модуль вашего комплексного числа с введенным параметром. Если модуль меньше, метод должен вернуть true, иначе - false.
      8. Напишите конструктор класса, присваивающий комплексному числу нули.
      9. Напишите конструктор класса, принимающий в качестве параметров два числа и присваивающий их соответственно действительной и мнимой части числа.
      10. Перепишите конструктор из предыдущего задания так, чтобы названия принимаемых им параметров СОВПАДАЛИ с названиями свойствами класса. Выполните корректное присвоение принятых значений свойствам при помощи служебного слова this.
    • Задание icon

      В тексте ответа необходимо записать полученное задание. В качестве ответа - прикрепить файл .java с решением.

  • Массивы и строки в Java (4 неделя)

    • Гиперссылка icon
    • Гиперссылка icon

      Прочитать главу 5 "Дополнительные сведения о типах данных и операциях". Найти ответы на приведенные ниже вопросы и выполнить практические задания.

    • Теория:

      1. Что такое массив?
      2. Как объявить массив в Java?
      3. Как заполнить массив в Java?
      4. Как создать двумерный массив в Java?
      5. Что такое свойство length у массивов в Java?
      6. Как при помощи цикла for each обработать массив?
      7. Как создать строку в Java?
      8. Какие методы есть в Java для работы со строками?
      9. Как осуществить конкатенацию строк в Java?
    • Практика:

      1. Создайте массив из 20 элементов.
      2. Заполните его случайными числами. (Как сгенерировать случайное число в Java, найдите самостоятельно - Google вам в помощь!)
      3. Выведите массив на экран.
      4. Создайте двумерный массив 4х5 и заполните случайными числами.
      5. Транспонируйте двумерный массив.
      6. Выведите результат на экран в виде таблицы 5х4.
      7. Создайте три строки, содержащие ваши фамилию, имя и отчество.
      8. Создайте ещё одну строку и добавьте в нее три предыдущие строки через пробелы.
      9. Выведите результат на экран.
      10. Выведите на экран 15 символ из строки.
      11. Выведите на экран отрезок строки с 5 по 13 символы.
    • Гиперссылка icon

      Прорешать задачи на массивы на ACMP. Найти описание класса Arrays и попытаться воспользоваться его возможностями. Найти описание работы с массивами через класс Collections и попытаться воспользоваться методами этого класса.

  • Управление классом в Java (5-6 неделя)

    • Гиперссылка icon
    • Гиперссылка icon
    • Гиперссылка icon
    • Теория:

      1. Что такое private и public? Как они работают?
      2. Как написать метод, принимающий в качестве параметра объект?
      3. Чем отличается передача методу простых типов данных от передачи методу объектов?
      4. Что такое перегрузка методов?
      5. Как перегрузить конструктор? Зачем это нужно?
      6. Что такое статические свойства и методы?
      7. Как создать метод с переменным числом аргументов? Как его вызвать?
    • Практика:

      1. Напишите класс MyMatrix. Ограничьте доступ к переменным, задающим высоту, ширину и массив, в котором будут храниться элементы матрицы.
      2. Напишите конструктор, который принимает число, создает квадратную матрицу соответствующего размера, и заполняет ее нулями.
      3. Создайте методы, позволяющие узнать ширину и высоту матрицы.
      4. Добавьте методы, позволяющие задать значение отдельному элементу матрицы и получить значение отдельного элемента матрицы.
      5. Напишите метод, который выводит матрицу на экран.
      6. Перегрузите конструктор матрицы - создайте версии конструктора, которые:
        • Будет создавать прямоугольную матрицу с заданными высотой и шириной.
        • Будет создавать прямоугольную матрицу и заполнять ее заданным числом.
        • Будет создавать копию уже имеющейся матрицы.
      7. Напишите метод, который будет добавлять к матрице число. Перегрузите его, чтобы можно было добавить матрице другую матрицу.
      8. Напишите методы для транспонирования матрицы, перемножения матриц и умножения матрицы самой на себя.
    • Тест icon
  • Наследование в Java (7-8 неделя)

    • Гиперссылка icon
    • Теория:

      1. Что такое наследование? подкласс? суперкласс?
      2. Чем отличает переопределение метода от перегрузки?
      3. Что такое динамическая диспетчеризация методов?
      4. Ссылки на суперкласс и объекты подклассов.
      5. Практический пример использования механизма переопределения методов.
      6. Что такое абстрактный метод? абстрактный класс? какое ограничение при компиляции связано с использование ключевого слова abstract?
      7. Для чего нужно ключевое слово final? Как оно используется?
      8. Что такое класс Object? Какие его методы мы можем переопределить? Какие - не можем? Почему?
    • Практика:

      1. Создайте класс, описывающий точку на числовой прямой. У точки должна быть одна координата. Создайте конструктор по умолчанию, создающий точку с нулевыми координатами, и конструктор, принимающий координаты точки. Напишите метод, выводящий координаты точки на экран. Напишите метод, позволяющий вычислить расстояние от точки до начала координат. Напишите метод, возвращающий расстояние между двумя точками.
      2. Создайте подкласс, унаследованный от класса точки, описывающий точку на координатной плоскости. Переопределите для него все методы и конструкторы.
      3. Создайте подкласс, унаследованный от класса двумерной точки, описывающий точку в трехмерном пространстве. Переопределите для него все методы и конструкторы.
      4. Сделайте начальный класс точки абстрактным, а в двумерных и трехмерных точках - реализуйте все методы. Попробуйте методы двумерной точки пометить модификатором final. Обратите внимание на то, какие проблемы это вызовет в методах трехмерных точек.
  • Пакеты и интерфейсы в Java (9-10 неделя)

    • Гиперссылка icon
    • Теория:

      1. Что такое пакет? Как его создать?
      2. Права доступа в пакетах, определяемые модификаторами public, private, protected и модификатором по умолчанию.
      3. Что такое интерфейс? как создать? как использовать?
      4. Что такое интерфейсная ссылка?
      5. Наследование интерфейсов.
      6. Методы интерфейсов, используемые по умолчанию.
      7. Множественное наследование интерфейсов. Статические методы интерфейсов.
    • Практика:

      1. Вынесите классы точек в отдельный пакет.
      2. Создайте интерфейс Comparable, в котором определите функции lessThan и moreThan. Реализуйте этот интерфейс в классах точек. Функции должны сравнивать текущую точку с другой и возвращать значения true или false. Меньшей считается та точка, которая ближе к началу координат. При помощи реализованных функций lessThan и moreThan сравните несколько точек между собой.
    • Задание icon
  • Обработка исключений (11-12 неделя)

    • Гиперссылка icon

      Прочитать главу 9. "Обработка исключений".

      Сначала найти ответы на все вопросы из блока "Теория". Затем - выполнить задания из блока "Практика".

    • Теория:

      1. Иерархия наследников класса Throwable. Кто родители, кто наследники?
      2. Какие пять ключевых слов могут использоваться при обработке исключений? Как именно используется каждое из них? (вы должны быть в состоянии взять и написать работающий пример для каждого ключевого слова)
      3. В каком порядке перехватываются исключения, которые являются подклассами друг друга?
      4. Основные методы класса Throwable?
      5. Использование ключевого слова throws.
      6. Чем проверяемые исключения отличаются от непроверяемых?
      7. Как определить свое исключение (наследуемое от Exception)?
    • Практика:

      1. Написать код, генерирующий ошибку деления на ноль. При помощи обработчика исключений обработать эту ситуацию и вывести свое сообщение об ошибке.
      2. Написать код, генерирущий NullPointerException. При помощи обработчика исключений обработать эту ситуацию и вывести свое сообщение об ошибке.
      3. Реализовать пример из учебника для структуры данных "очередь" с обработкой исключений.
      4. Написать свой класс Stack. Конструктор принимает размер стека. Для класса определить методы push(), top() и pop(). Создать свои классы исключений для ситуаций переполнения стека или попытки прочитать элемент, когда стек пуст. В методах push() и pop() разместить обработку исключений с использованием объявленных вами классов.
  • Обобщения (13-14 неделя)

    • Гиперссылка icon

      Прочитать главу 13. "Обобщения".

      Сначала найти ответы на все вопросы из блока "Теория". Затем - выполнить задания из блока "Практика".

    • Теория:

      1. Что такое обобщения? Зачем они нужны? Приведите пример обобщенного класса.
      2. Что такое ограниченные типы? Зачем они нужны? Реализуйте в коде пример их использования.
      3. Шаблоны аргументов. Ограниченные шаблоны. Приведите пример.
      4. Обощенные методы и конструкторы. Приведите работающий пример.
      5. Обобщенные интерфейсы. Приведите пример.
      6. Когда в обобщения используется базовый класс Object и чем это опасно?
      7. Как работает очистка? Какие ошибки неоднозначности могут могут возникнуть при использовании обобщений? Какие ограничения наложены на использование обобщений?
  • Пользовательский интерфейс (GUI)

    • Гиперссылка icon

      Прочитать главу 16. "Введение в Swing".

      Выполнить задания из блока "Практика".

    • Практика:

      Написать оконное приложение "Калькулятор", реализующее основные арифметические операции над двумя числами: сложение, вычитание, умножение и деление.

  • Зачет

    • На зачёте вам будет предложен один теоретический вопрос и одно практическое задание. Ответ на вопрос должен состоять из двух частей: вы должны объяснить, зачем существует то или иное понятие (какую проблему позволяет решить) и привести пример использования. Пользоваться учебником, тетрадями, Интернетом, телефонами и другими вспомогательными материалами будет нельзя. Оцениваться будет сухой остаток в вашей голове. Если вы неправильно отвечаете на вопрос или не можете выполнить задание, получаете дополнительный вопрос или дополнительное задание.

      "Отлично" - без дополнительных заданий.

      "Хорошо" - одно дополнительное задание.

      "Удовлетворительно" - два дополнительных задания.

    • Задание icon
    • Список вопросов:

      1.       Что такое сущность? Что такое объект?

      2.       Что такое свойства объекта? Что такое методы объекта?

      3.       Что такое инкапсуляция? Что такое класс? Что такое экземпляр класса? Как выглядит общая форма определения класса?

      4.       Массивы как объекты в Java. Что такое массив? Как объявить массив в Java? Как заполнить массив в Java? Как создать двумерный массив в Java? Что такое свойство length у массивов в Java? Как при помощи цикла for each обработать массив?

      5.       Строки как объекты в Java. Как создать строку в Java? Какие методы есть в Java для работы со строками? Как осуществить конкатенацию строк в Java?

      6.       Свойства и методы класса. Как написать метод, принимающий в качестве параметра объект? Чем отличается передача методу простых типов данных от передачи методу объектов?

      7.       Конструкторы класса. Как перегрузить конструктор? Зачем это нужно?

      8.       Статические свойства и методы. Статические блоки кода.

      9.       Как создать метод с переменным числом аргументов? Как его вызвать?

      10.   Наследование. Что такое наследование? подкласс? суперкласс? В чем смысл наследования?

      11.   Чем отличает переопределение метода от перегрузки?

      12.   Что такое динамическая диспетчеризация методов?

      13.   Что такое абстрактный метод? абстрактный класс? какое ограничение при компиляции связано с использование ключевого слова abstract?

      14.   Блокировка классов. Для чего нужно ключевое слово final? Как оно используется?

      15.   Базовый класс. Что такое класс Object? Какие его методы мы можем переопределить? Какие - не можем? Почему?

      16.   Что такое пакет? Как его создать? Права доступа в пакетах, определяемые модификаторами public, private, protected и модификатором по умолчанию.

      17.   Что такое интерфейс? как создать? как использовать? Что такое интерфейсная ссылка?

      18.   Наследование интерфейсов. Методы интерфейсов, используемые по умолчанию.

      19.   Множественное наследование интерфейсов. Статические методы интерфейсов.

      20. Обработка исключений. Иерархия наследников класса Throwable. Кто родители, кто наследники? Какие пять ключевых слов могут использоваться при обработке исключений? Как именно используется каждое из них? (вы должны быть в состоянии взять и написать работающий пример для каждого ключевого слова)

      21. В каком порядке перехватываются исключения, которые являются подклассами друг друга? Основные методы класса Throwable?

      22. Чем проверяемые исключения отличаются от непроверяемых? Использование ключевого слова throws. 

      23. Что такое обобщения? Зачем они нужны? Приведите пример обобщенного класса. Обощенные методы и конструкторы. Приведите работающий пример.

      24. Что такое ограниченные типы? Зачем они нужны? Реализуйте в коде пример их использования. Шаблоны аргументов. Ограниченные шаблоны. Приведите пример.

      25. Когда в обобщения используется базовый класс Object и чем это опасно? Как работает очистка? Какие ошибки неоднозначности могут могут возникнуть при использовании обобщений? Какие ограничения наложены на использование обобщений?

      26. Анонимные классы. В каких случаях используются? Приведите пример.

      27. Использование ООП в реализации GUI. Библиотека Java Swing. Иерархия контейнеров и компонентов. Свойства контейнеров и компонентов. Основные методы работы с ними.

    • Список практических заданий:

      1.       Опишите объект "комлексное число" в виде класса Complex. Свойства, важные для абстракции, определите самостоятельно. Создайте экземпляр класса. Заполните все свойства данными. Напишите метод, выводящий комплексное число на экран. Вызовите для двух разных чисел. Напишите метод, принимающий целое число. Сравните модуль вашего комплексного числа с введенным параметром. Если модуль меньше, метод должен вернуть true, иначе - false.

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

      3.        Опишите объект "комлексное число" в виде класса Complex. Свойства, важные для абстракции, определите самостоятельно. Напишите конструктор класса, присваивающий комплексному числу нули. Напишите конструктор класса, принимающий в качестве параметров два числа и присваивающий их соответственно действительной и мнимой части числа.

      4.   Создайте массив из 20 элементов. Заполните его случайными числами. (Как сгенерировать случайное число в Java, найдите самостоятельно - Google вам в помощь!) Выведите массив на экран.

      5.   Создайте двумерный массив 4х5 и заполните случайными числами. Транспонируйте двумерный массив. Выведите результат на экран в виде таблицы 5х4.

      6.   Создайте три строки, содержащие ваши фамилию, имя и отчество. Создайте ещё одну строку и добавьте в нее три предыдущие строки через пробелы. Выведите результат на экран. Выведите на экран 15 символ из строки. Выведите на экран отрезок строки с 5 по 13 символы.

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

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

      9.   Напишите класс MyMatrix. Ограничьте доступ к переменным, задающим высоту, ширину и массив, в котором будут храниться элементы матрицы. Напишите метод, который выводит матрицу на экран. Перегрузите конструктор матрицы - создайте версии конструктора, которые:

        • Будет создавать прямоугольную матрицу с заданными высотой и шириной.
        • Будет создавать прямоугольную матрицу и заполнять ее заданным числом.
        • Будет создавать копию уже имеющейся матрицы.

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

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

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

      13.   Создайте класс, описывающий точку на числовой прямой. Создайте подкласс, унаследованный от класса точки, описывающий точку на координатной плоскости. Переопределите для него все методы и конструкторы.

      14.   Создайте класс, описывающий точку на числовой прямой. Создайте подкласс, унаследованный от класса точки, описывающий точку на координатной плоскости. Создайте подкласс, унаследованный от класса двумерной точки, описывающий точку в трехмерном пространстве. Переопределите для него все методы и конструкторы.

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

      16.    Создайте класс, описывающий точку на числовой прямой. Создайте подкласс, унаследованный от класса точки, описывающий точку на координатной плоскости. Создайте подкласс, унаследованный от класса двумерной точки, описывающий точку в трехмерном пространстве. Вынесите классы точек в отдельный пакет.

      17.   Создайте интерфейс Comparable, в котором определите функции lessThan и moreThan. Реализуйте этот интерфейс в классах точек. Функции должны сравнивать текущую точку с другой и возвращать значения true или false. Меньшей считается та точка, которая ближе к началу координат. При помощи реализованных функций lessThan и moreThan сравните несколько точек между собой.

      18. Напишите код, генерирущий NullPointerException. При помощи обработчика исключений обработать эту ситуацию и вывести свое сообщение об ошибке.

      19. Напишите свой класс Stack. Конструктор принимает размер стека. Для класса определить методы push(), top() и pop(). Создать свои классы исключений для ситуаций переполнения стека или попытки прочитать элемент, когда стек пуст. В методах push() и pop() разместить обработку исключений с использованием объявленных вами классов.

      20. Напишите свой класс Stack с использованием обобщений. Конструктор принимает размер стека. Для класса определить методы push(), top() и pop().

      21. Создайте интерфейс Comparable с использованием обобщения, в котором определите функции lessThan и moreThan. Реализуйте этот интерфейс в классах точек. Функции должны сравнивать текущую точку с другой и возвращать значения true или false. Меньшей считается та точка, которая ближе к началу координат. При помощи реализованных функций lessThan и moreThan сравните несколько точек между собой.

      22. Создайте интерфейс Testable, в котором определена функция test(). Создайте статический метод, принимающий в качестве входного параметра объект типа Testable и вызывающий функцию test(). В главной функции main() вызовите этот статический метод с использованием анонимного класса, реализующего интерфейс Testable.