Java для школьников. Занятие №1. Всё является объектом.

Развитие уровня абстракции языков программирования

Объектно-ориентированное программирование (ООП)
- часть превращения компьютера в средство самовыражения.
Б.Эккель

Для мотивации. Занятие построено на небольшом экскурсе в историю программирования (см. Брюс Эккель "Философия Java", 4-е издание, Глава 1 "Введение в объекты", параграф - "Развитие абстракции" с.18). Здесь у Эккеля есть очень интересная мысль: он делает упор на том, что ООП не лучше чем, например, процедурное программирование, но "более абстрактное". Поэтому, нет смысла искать "что круче" C или Java. Хорошие программы реализованы с помощью различных парадигм (кто скажет, что операционная система Linux написанная на C, простенькая и невостребованная программа?). Однако, Эккелем, и многими другими, ООП возводится в ранг искусства. А значит, есть смысл с этим способом программирования (ООП) познакомиться.

Итак...

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

Следующим этапом развития абстракции в программировании является создание "командных" языков. Так их называет Б.Эккель (не путайте с различными shell-языками). Один из вариантов развития таких языков - процедурное программирование, типичными представителем которого является, например, язык Pascal. Команды (операторы), процедуры и функции - это инструкции или задания компьютеру выполнить определенные действия, суть которых примерно та же, что у машинных языков, только команды ближе к языку человеческому. Вместо адреса ячейки памяти здесь выступает имя переменной.

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

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

Перейдем к ООП. Нельзя сказать, что в Java парадигма объектно-ориентированного программирования (парадигма - греческое слово, означает пример, модель, образец) была реализована впервые. Основные принципы ООП были сформулированы еще Аланом Кеем при создании одного из первых объектно-ориентированных языков программирования Smalltalk. Вот они:

  • Все является объектом;
  • Программа – это группа объектов, указывающих друг другу что делать посредством сообщений;
  • Каждый объект может иметь в своем составе другие объекты;
  • У каждого объекта есть свой тип;
  • Все объекты определенного типа могут получать одинаковые сообщения.

Объекты в Java реализуются с помощью ключевого слова class ("classis" (лат.) - разряд, группа, в смысле вид, тип, элемент классификации, объекты содержащие общие признаки). И даже создание самой простой программы, выводящей на экран "Привет!", не обойдется без создания класса. Существует мнение, что лучший способ научиться программировать - самому сделать какую-то программу. Давайте не будем отходить от этого принципа и попробуем сделать на Java простейшую программу. Для этого нам потребуется инструмент, с помощью которого создаются программы на языке Java - JDK (Java Development Kit). Это бесплатно распространяемый компанией Oracle Corporation (ранее Sun Microsystems) комплект разработчика приложений на языке Java.

Итак... наша цель добиться вывода фразы "Привет!" на экране компьютера с помощью Java. Для этого на следующем занятии нам потребуется установить на компьютер JDK.

Для Интереса. Говоря об абстракции ЯП нельзя не сказать о функциональном программировании. Функциональные языки (Lisp, Erlang) представляют совокупность последовательных состояний вычислительного процесса явным образом, например как список. Функция понимается как математическая модель "Вход --> Выход" (одинаковый вход дает тот же выход). Функциональное программирование применяется для параллельных вычислений (чаты, высоконагруженные системы WEB, базы данных, требующие масштабирования и т.д.).

Обратите внимание на время создания различных языков программирования (на картинке подписано рядом с названием ЯП). Можно заметить, что возникновение различных парадигм программирования произошло примерно в одно время. Однако популярность эти способы программирования могли завоевать гораздо позже.

Контрольные вопросы:
* Что означает слово "парадигма" применительно к программированию?
* Какие парадигмы программирования Вы знаете?