Skip to content

Программирование 2 семестр Инфокоммуникационные технологии (ИКТ) ИТМО

Notifications You must be signed in to change notification settings

CandyGoose/Programming_2_term_ICT

Repository files navigation

Программирование 2 семестр

Инфокоммуникационные технологии


Материалы предоставлены Игорем Смирновым


Урок 1. ООП: атрибуты и методы класса

Указания: В каждом задании необходимо работать с классами, их методами и объектами. Для тестирования и вывода информации на экран написать функции, запрашивающие у пользователя входные данные, а также создающие объекты класса.

  1. Напишите программу с классом Coffee (для определения добавок к кофе), который принимает 1 аргумент при инициализации (отвечающий за добавку к кофе). В классе реализуйте метод show_my_drink(), выводящий на печать «Кофе и {ДОБАВКА}» в случае наличия добавки, а иначе отобразится следующая фраза: «Черный кофе».

  2. Напишите программу с классом Triangle, который содержит атрибуты класса – три стороны треугольника, содержит метод для вычисления площади треугольника по формуле Герона. Создайте три объекта данного класса: равносторонний, обычный треугольник, треугольник не существующий.

  3. Напишите программу с классом Mathem. Создайте два атрибута — a и b. Напишите методы: addition — сложение, multiplication — умножение, division — деление, subtraction — вычитание. При передаче в методы параметров a и b с ними нужно производить соответствующие действия и печатать ответ. Добавить обработку деления на ноль.

  4. Создайте класс Tree с конструктором. Создайте атрибуты класса: name (название), age (возраст), height (высота). Напишите методы класса:

    • первый — пересадить дерево, при его вызове выводится сообщение «Дерево пересадили», либо «уже было пересажено»;
    • второй — вырубка дерева, выводит сообщение «Дерево вырубили», либо «уже было вырублено»;
    • третий — присвоение дереву личного имени;
    • четвертый – изменение возраста дерева;
    • пятый – изменение высоты дерева;
    • шестой – вывод всей информации о дереве.

Урок 2(1). ООП: Абстракция. Полиморфизм. Наследование. Инкапсуляция.

  1. Напишите программу с классом Pupil, в котором есть три атрибута: name, age и classNumber. По умолчанию name = Radomir, age = 8, classNumber = 1-A. Необходимо создать методы set-ы и get-ы для каждого атрибута (установить/получить значение). Один метод для вывода всей информации по ученику. В программе необходимо создать пять экземпляров класса Pupil, с помощью методов установить им разные имена, возраст и номер класса, вывести информацию о каждом на экран.
  2. Напишите программу с иерархией классов пород кошек. Родительский класс Cat имеет атрибуты кличка, возраст. Возраст кошки не может быть отрицательным и не выше 19 лет. Дочерние классы Сфинкс, Мейкун, Корат имеют отличительные особенности: длина шерсти (лысый/длинная/средняя) и предназначение в виде метода (охотник/крысолов/играет). Создайте по экземпляру каждого класса-потомка, установите им разные значения и выведите на экран.
  3. Напишите программу с классом Country и атрибутами capital и population. Опишите методы setPopulation и getPopulation. Наcеление может быть только положительная величина. Опишите наследуемые от класса Country классы Russia, Canada, Germany. В дочерних классах установите значение столицы по умолчанию. Создайте по экземпляру каждого класса- потомка, с помощью методов установите численность населения, выведите всю информацию об объектах на экран.
  4. Написать программу, в которой есть главный класс Doctor с атрибутами Name (имя) и Age (возраст), в конструкторе установите значения по умолчанию имя Айболит и возраст 25 лет, также опишите два метода getName и setName. На основе главного класса путем наследования опишите три класса Pediatrist, Окулист, Дантист. Самостоятельно добавьте каждому классу различные дополнительные атрибуты и переопределите у всех классов метод getName. Создайте по экземпляру каждого класса-потомка, выведите соответствующие значения атрибутов классов.

Урок 2(2). ООП: Абстракция. Полиморфизм. Наследование. Инкапсуляция.

Указания: В каждом задании необходимо работать с классами, их методами и объектами. Для тестирования и вывода информации на экран написать функции, запрашивающие у пользователя входные данные, а также создающие объекты класса.

  1. Напишите программу с классом Student, в котором есть три атрибута: name, groupNumber и age. По умолчанию name = Radomir, age = 18, groupNumber = 1213. Необходимо создать методы set-ы и get- ы для каждого атрибута (установить/получить значение). Один метод для вывода всей информации по студенту.

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

  2. Напишите программу с классом Country и атрибутами capital и population. Опишите методы setPopulation и getPopulation. Население может быть только положительная величина. Опишите наследуемые от класса Country классы Russia, Canada, Germany. В дочерних классах установите значение столицы по умолчанию. Создайте по экземпляру каждого класса-потомка, с помощью методов установите численность населения, выведите всю информацию об объектах на экран.

  3. Напишите программу с иерархией классов пород собак. Родительский класс Dog имеет атрибуты кличка, возраст. Возраст собаки не может быть отрицательным и не выше 20 лет. Дочерние классы ТойТерьер, Спаниель, НемецкаяОвчарка имеют отличительные особенности: атрибут класса звук голоса и предназначение в виде метода (охотничья/сторожевая/домашняя). Создайте по экземпляру каждого класса-потомка, установите им разные значения.

  4. Написать программу, в которой есть главный класс Games со статическим атрибутом Year, опишите конструктор присваивающий значение атрибуту Year, также опишите метод getName, который возвращает имя игры. На основе главного класса путем наследования опишите четыре класса PCGames, PS4Games, XboxGames, MobileGames. Добавьте каждому дочернему классу различающие атрибуты и переопределите у всех классов метод getName. Создайте по экземпляру каждого класса-потомка, выведите соответствующие значения атрибутов классов.

Контрольные задания №1-1: ООП

Постановка задачи

  • Требуется разработать программы согласно указанным ниже заданиям (на выбор, но можно реализовать свою тему).
  • Реализация классов должна быть в отдельных модулях.
  • Клиентский код должен импортировать вашу библиотеку и посредством объектов воспользоваться реализуемой в них функциональностью.
  • В тексте использовать комментарии, поясняющие ваши действия и принятые решения. Рекомендуется сделать их как можно подробными и понятными.
  • Объем задания (конкретные указания, что надо выполнить) указан ниже (см. Варианты заданий).
  • Программное решение общего задания требуется представить в виде отдельных решений по каждому заданию, которые должны показать развитие общего проекта. Сохранить проект для дальнейшего использования!

Задание 1. Базовое решение

  • Реализовать класс с конструктором. Определить значения по умолчанию для некоторых аргументов, чтобы их можно было не указывать в тех случаях, когда какие- то определенные значения недоступны или бессмысленны.
  • Реализовать с помощью свойств инкапсуляцию.
  • Добавить в класс методы, определяющие поведение.
  • Реализовать производные классы (не менее двух) и методы, характерные для них.
  • Реализовать отношение композиции.
  • Реализовать для базового класса перегрузку двух любых стандартных операторов, например, сложения и вычитания. Методы перегрузки должны возвращать новый объект того же класса.

Урок 4. Работа с базой данных

Схематично работа с базой данных может выглядеть примерно так:

  1. Осуществить подключение к базе данных (вызов connect() с получением объекта- соединения)
  2. Создание одного или нескольких курсоров (вызов метода объекта-соединения cursor() с получением объекта–курсора)
  3. Исполнение команды или запроса (вызов метода execute() или его вариантов)
  4. Получение результатов запроса (вызов метода fetchone() или его вариантов)
  5. Завершение транзакции или ее откат (вызов метода объекта-соединения commit() или rollback())
  6. Когда все необходимые транзакции произведены, подключение закрывается вызовом метода close() объекта-соединения

Задание 1. Подключение к MS Excel с помощью библиотеки pandas и функции read_excel().

  1. Проанализировать код
import pandas
excelDataDF = pandas.read_excel('vegetable.xlsx', sheet_name='summer')
# напечатать всё содержимое листа
print(excelDataDF)
  1. Создать файл MS Excel «vegetable». На листе «summer» создать таблицу с полями: номер п/п, название овоща, цена, кто любит овощ, количество, стоимость (цена * на количество).
  2. Заполнить таблицу произвольными значениями (не менее 10 строк). Сохранить.
  3. Вывести информацию из файла на экран консоли в Питоне

Задание 2. Подключение к БД SQLite с помощью библиотеки sqlite3.

  1. Проанализировать и реализовать код
import sqlite3
# Попытаться открыть соединение к базе
try:
   # осуществить подключение к БД sqlitePy
   connection = sqlite3.connect('sqlitePy.db')
   
   # создать курсор для выполнения запросов
   cursor = connection.cursor()
   print("База данных создана и успешно подключена к SQLite")
   
   # вывести версию базы
   select_query = "select sqlite_version();"
   cursor.execute(select_query)
   
   # вернуть все строки в виде списка
   record = cursor.fetchall()
   print("Версия базы данных SQLite: ", record)
   # закрыть курсор
   cursor.close()
   
except sqlite3.Error as error:
   print("Ошибка при подключении к sqlite", error)
finally:

   # закрыть соединение с базой
   if (connection):
      connection.commit()
      connection.close()
      print("Соединение с SQLite закрыто")
  1. Создать свою базу country.db с таблицей tCountry и полями: номер п/п (счетчик), название страны.
  2. Используя методы execute(), executemany() и запрос INSERT INTO, заполнить таблицу произвольными значениями (не менее 10 строк)
  3. Применить методы fetchone(), fetchmany(), fetchall() вывести значения из базы.

Задание 3. Самостоятельно создайте БД music.db SQLite с таблицами, установите взаимосвязи между таблицами, заполните данными и отобразите.

  1. Таблицы Музыкант (tMusician), Песни (tSongs), Комментарии (tComments).
  2. Таблица Музыкант содержит поля: id, псевдоним, возраст, пол; Таблица Песни содержит поля: id, название, описание, id_музыканта; Таблица Комментарии содержит поля: id, текст_Комментария, id_песни, id_музыканта.
  3. Установить отношения один ко многим между таблицами: Один музыкант может исполнять несколько песен. Один музыкант можете оставлять много комментариев, и одна песня может иметь несколько комментариев (схема БД представлена на Рисунок 1).
  4. Заполните таблицы произвольными данными (не менее 10 строк)
  5. Запустите выборки данных с помощью

image

Рисунок 1. Схема БД music.db

Контрольные задания №1-2: ООП

Постановка задачи

Продолжить работу над проектом, созданном в Контрольной №1-1

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

Сохранить проект для дальнейшего использования!

Задание 2. Множественное наследование

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

Задание 3. Расширение функциональности

  • Реализуйте в своем проекте декораторы, которые
  1. Pегистрирует вызовы важных сценариев.

    Результат декорирования – информация о выполнении сценария (например, факт отработки, время начала и окончания, длительность и т.д.).

  2. Устанавливает/проверяет пре- и постусловия функций.

  3. Что-либо на ваше усмотрение.

  • Реализуйте в своем проекте метаклассы для расширения классов дополнительными возможностями (на ваше усмотрение).

Варианты заданий

На примере первого задания показан примерный перечень действий по проектированию системы.

Задание. Пиццерия.

Постановка задачи.

Пиццерия предлагает клиентам три вида пиццы: Пепперони, Барбекю и Дары Моря, каждая из которых определяется тестом, соусом и начинкой.

Требуется:

  • спроектировать и реализовать приложение для терминала, позволяющее обеспечить обслуживание посетителей.

Рекомендация по проектированию

  1. По результатам анализа предметной области (бизнес-процесса работы пиццерии) в контексте задачи можно выделить 3 сущности (объекта):
  • Терминал: отвечает за взаимодействие с пользователем:
    • вывод меню на экран;
    • прием команд от пользователя (выбор пиццы, подтверждение заказа, оплата и др.);
  • Заказ: содержит список заказанных пицц, умеет подсчитывать свою стоимость;
  • Пицца: содержит заявленные характеристики пиццы, а также умеет себя подготовить (замесить тесто, собрать ингредиенты и т.д.), испечь, порезать и упаковать.

Поскольку пиццерия реализует несколько видов пиццы, которые различаются характеристиками, логично будет сделать общий класс Пицца, а в дочерних классах (например, классе ПиццаБарбекю) уточнить характеристики конкретной пиццы. 2. Рекомендуется разработать для указанных классов диаграмму классов в нотации UML. 3. Разработать алгоритм работы (сценарий) пользователя с терминалом (основным классом, отвечающим за интерфейс).

Задание. Банковские вклады

Банк предлагает ряд вкладов для физических лиц:

  • Срочный вклад: расчет прибыли осуществляется по формуле простых процентов;
  • Бонусный вклад: бонус начисляется в конце периода как % от прибыли, если вклад больше определенной суммы;
  • Вклад с капитализацией процентов.

Требуется реализовать приложение, которое бы позволило подобрать клиенту вклад по заданным параметрам.

Задание. Поединок

Дан класс "Боец" – базовый класс.

Требуется реализовать имитацию поединка двух соперников.

Реализовать производные классы (не менее двух) – бойцов определённого единоборства.

От них создаются два экземпляра-юнита.

Примерная последовательность действий:

  • Перед началом поединка каждому устанавливается здоровье в 100 очков.
  • В ходе поединка противники в случайном порядке бьют друг друга. Тот, кто бьет, здоровья не теряет. У того, кого бьют, оно уменьшается на 20 очков от одного удара.
  • После каждого удара надо выводить сообщение, какой юнит атаковал, и сколько у противника осталось здоровья.
  • Как только у кого-то заканчивается ресурс здоровья, программа завершается сообщением о том, кто одержал победу.

Задание. Шахматы

Требуется реализовать объектную модель Шахматные фигуры.

У всех шахматных фигур есть общий функционал, например - возможность фигуры ходить и быть отображенной на доске.

Исходя из этого, необходимо создать абстрактный класс Фигура, определить в нем абстрактный метод (например, - ход, поскольку каждая фигура ходит по-своему) и реализовать общий функционал (например, отрисовка на доске).

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

Контрольные задания №2-1: Расширение проекта. Исключения.

Постановка задачи

Продолжить работу над проектом, созданном в Контрольной №1-2

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

Сохранить проект для дальнейшего использования!

Задание 4. Исключения

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

Контрольные задания №2-2: Расширение проекта. Взаимодействие с базой данных

Постановка задачи

Продолжить работу над проектом, созданном в Контрольной №2-1

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

Сохранить проект для дальнейшего использования!

Задание 5. Многопоточность и асинхронность

  • Добавьте в свой проект реализацию вторичного потока для любого алгоритма.
  • Подберите наиболее наглядный пример, обоснуйте свой выбор.
  • Добавьте в свой проект реализацию асинхронного вызова для любого алгоритма.
  • Подберите наиболее наглядный пример, обоснуйте свой выбор.

Задание 6. Реализация взаимодействия с базой данный

Реализовать хранение данных в базе данных.

Реализовать взаимодействия с базой данных на основе ORM.

Выбор типа СУБД и технологии разработки на усмотрение разработчика – обосновать принятые решения.

Урок 6. GUI

Указания: Программу реализовать с использованием ООП: классы, методы и объекты. Используя стандартную библиотеку tkinter, реализовать графические возможности на языке Python.

  • Задание 1. Создать приложение Графический калькулятор для расчетов с двумя аргументами простых операций сложения/вычитания/умножения/деления.

    Две радио кнопки (класс RadioButton) с подписями Калькулятор/Прямоугольник (понадобиться для Задания 3). Значение по умолчанию Калькулятор. Если выбрано значение Прямоугольник в текстовые поля аргументов нельзя вводить отрицательные значения;

    Текстовые поля (класс Entry) - предназначены для ввода аргументов. Аргументы могут быть положительные/отрицательные, целые/дробные;

    Множественный выбор (класс Checkbutton) - выполнение вычислений и отображение результатов. Если выбран переключатель Калькулятор, то отображаются результаты суммы/разности/произведения/частного. Если выбран переключатель Прямоугольник, вычисляются и отображаются только Периметр и Площадь;

    Метки (класс Label) статические для подписи Текстовых полей и динамические для отображения результатов вычислений;

    Кнопки (класс Button) выполняют операции Поменять местами аргументы, Очистить форму, и Выход из приложения.

    Предусмотреть отлов возможных ошибок ввода данных, результаты вычислений округлить до сотых.

    По желанию: задать размеры, цвет, заголовок окна; изменить цвет/шрифт виджетов.

  • Задание 2. Расширить функционал приложения Графический Калькулятор, создав пункты меню. Добавить три главных пункта: Файл, Операции, Справка.

    Меню Файл содержит команду Выход

    Меню Операции содержит возможность Очистить данные и выбор выполнения операции суммы/разности/произведения/частного и визуализацию, что выбрано.

    Меню Справка отображает окно диалога с информацией о программе.

  • Задание 3. Расширить функционал приложения Графический Калькулятор, добавив создание графического прямоугольника (виджет Canvas и create_rectangle()) внизу формы. Длина/Ширина прямоугольника - это аргументы, введенные в текстовые поля. Цвет, заливку сделать по желанию.

Домашнее задание

Требования: создать программное обеспечение учета грузового транспорта для Автотранспортного отдела логистической компании.

Задача подобрать доступный грузовой транспорт в зависимости от размера (веса) перевозимого груза, приложение реализовать с помощью ООП, БД, графического интерфейса.

В программе должно быть реализовано:

  1. Добавлять/удалять грузовой транспорт;
  2. Просматривать весь доступный транспорт;
  3. Просматривать грузовой транспорт по грузоподъемности;
  4. Просматривать свободный грузовой транспорт;
  5. Вносить заявку на перевоз груза по указанным габаритам;
  6. Подобрать и забронировать транспорт;
  7. Просматривать занятый грузовой транспорт;
  8. Интерфейс программы реализовать на ваше усмотрение;
  9. Реализовать возможность сохранения данных в базу данных.

Требования к содержанию и структуре отчета:

  1. Титульный лист;
  2. Задание на выполнение домашнего задания;
  3. Описание решения задания с указанием применения элементов программирования;
  4. Графические материалы, диаграмма классов, схема базы данных;
  5. Выводы.

Справочная информация:

Тип Грузоподъемность, тонн Длина Ширина Высота
Газель 2 3 2 1.7-2.2
Бычок 3 4.2-5 2-2.2 2-2.4
MAN-10 10 6-8 2.45 2.3-2.7
Фура 20 13.6 2.46 2.5-2.7

About

Программирование 2 семестр Инфокоммуникационные технологии (ИКТ) ИТМО

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published