Типы программирования и основы объектно-ориентированного программирования Когда-то знакомство с основами программирования начиналось не с изучения таких сложных
языков, как С и Assembler, а с изучения языка Basic. Эта аббревиатура расшифровывается как "универсальный символьный код для начинающих". Basic является интерпретирующим языком.
Раньше интерпретирующие языки программирования были предназначены только для начинающих, так как программы, написанные на этих языках, могли выполняться лишь в редакторах программ. Теперь же Visual Basic (наследник Basic) имеет в своем составе компилятор, а для интерпретирующих языков программирования предусматривается среда выполнения, которая встраивается в различные операционные системы.
Рассмотрим теперь различия в схемах построения программ в так называемом процедурном программировании, с одной стороны, и объектно-ориентированном, с другой. Одним из предшественников Java был С (подробнее о родословном древе языков мы скажем позднее), который "исповедовал" процедурный тип программирования. В процедурном программировании основной единицей программы выступает процедура (или функция) — обособленный именной блок кода, который можно откуда-либо вызывать.
Главная процедура main (основной блок кода) последовательно вызывала другие процедуры программы, которые могли передавать управление друг другу. Написанная таким образом программа была громоздкой и не очень структурированной.
Этих недостатков в определенной мере лишена программа, построенная по принципам объектно-ориентированного программирования (ООП). Такие программы стали писать на языке С++, выступившим наследником языка С. В ООП структурной единицей программы считается не процедура, а так называемый класс. У класса есть свойства (характеристики класса) и методы (действия над конкретным объектом — "экземпляром" — данного класса). Ссылки на объект сокращают текст программы за счет обращения к соответствующим характеристикам и методам класса, к которому принадлежит данный конкретный объект. Приведем пример, который пояснит сказанное.
Предположим, у нас есть программа, которая работает со списком пользователей данного персонального компьютера. Каждый новый пользователь становится конкретным «объектом» класса "пользователи". При создании нового объекта ему приписываются "свойства", которые должны быть у каждого экземпляра, или объекта, класса (это могут быть фамилия, имя, отчество, дата рождения и т.п.). С объектом можно что-то сделать (вставить в список, удалить из списка, изменить адрес или фамилию пользователя и т.п.) — это и есть "методы" (блоки кода, которые принадлежат классу, но вызываются данным конкретным объектом и позволяют выполнять как минимум одну операцию с данным объектом).
Введем еще несколько понятий, важных для последующего наложения: событие и обработчик события. Сразу поясним, что это такое, на том же примере. Когда мы пользуемся упомянутой программой, мы можем щелкнуть на соответствующих кнопках (каждая из которых обозначает какую-то важную для нас операцию, например: "добавить", "удалить", "изменить" и т.п.). Как только мы щелкнем на какой-то конкретной кнопке, возникает событие. Сразу же вступает в действие обработчик события, т.е. начинает работать код, являющийся реакцией на событие. Обработчик события, скажем щелчка на кнопке «Добавить», может по нашему желанию создать новый объект класса пользователи и применить какой-либо метод данного класса для этого конкретного объекта для изменения его свойств (например, свойству фамилия мы по желанию пользователя присваиваем значение Иванов). В классе есть четкое описание всех возможных методов, которые можно применить к любому экземпляру данного класса. Поэтому обращение к классу экономит время и силы программиста, работающего с конкретными объектами.
Язык С++ — предшественник Java — нельзя было назвать исключительно "объектно-ориентированным языком". В программе на языке С++ могли не использоваться классы — структурные единицы ООП, а главная процедура main не принадлежала ни к какому классу.
Напротив, Java — строго объектно-ориентированный язык, он четко выдерживает все требования парадигмы ООП.
Рассмотрим еще три важных понятия ООП: наследование, инкапсуляция, полиморфизм. Наследование — это способность классов быть производными от других классов, наследуя при этом какие-то их методы и свойства. Вернемся к нашему старому примеру.
Класс пользователи может быть дочерним классом родительского класса люди и. естественно, наследовать какие-либо его свойства (допустим, пол, год рождения и т.п.) и методы (например, метод-запрос пользователя/человека о его паспортных данных).
Инкапсуляция позволяет ограничить приписывание каких-либо свойств класса другим объектам, которые не являются объектами этого класса. Полиморфизм позволяет объектам принимать несколько различных форм (в нашем примере один объект, созданный как объект типа пользователи, может быть как экземпляром класса пользователи, так и экземпляром класса люди).
А теперь познакомимся с историей создания языка Java.
История языка Java
Давным-давно программисты писали программу непосредственно в двоичном коде. С появлением первого языка программирования — Assembler — работа программистов сильно упростилась. Стали появляться все новые и новые языки программирования. В 1972 году Деннис Ритчи из AT&T Bell Laboratories разработал процедурный язык С, который сразу стал очень популярным, так как был предназначен для создания сложных программ. В 1979-1980 гг. Бьерном Страуструпом, работающим в той же компании, был создан язык С with Classes.
У этого языка обнаружились некоторые недостатки, поэтому в 1983 году тот же Страуструп разработал язык С++, ставший популярным в 90-е гг. XX века. В 1991 году в компании Sun Microsystems под руководством Джеймса Гослинга, Патрика Ноутона, Криса Варта, Эдда Френка и Майкла Шеридана началась разработка языка Oak (дуб). В конце 1992 года появился первый вариант этого языка. С весны 1995 года данный язык стал называться Java.
Ява — остров Индонезийского архипелага, а также сорт кофе, который, согласно легенде, пили создатели Java.
Вначале была создана версия языка Java 1.0, потом появилась версия 1.1, а затем появился Java 2, которым мы пользуемся и сейчас. В конце 90-х годов компания Microsoft (группа сотрудников под руководством Андерса Хельсберга) объявила о создании языка С# (читается: "си-шарп"), очень похожего на Java. Можно сказать, это "двоюродный брат" Java (вероятно, даже троюродный). Он поддерживается только редактором программ Microsoft Visual С# .NET, а также средой разработки Delphi 2005 компании Borland.
Редакторы программ Поговорим теперь о редакторе программ Borland JBuilder 2005. Этот редактор программ помогает программисту на всех этапах создания программы — от набора кода до запуска готовой программы. Для удобства программиста необходимо, чтобы редактор программ имел IDE — интегрированную среду разработки.
Ранее существовал такой редактор программ, как Microsoft Visual J++ 6.0. Это был тоже очень мощный редактор программ и, возможно, вы о нем слышали. Однако в код программы он встраивал некий элемент, который позволял запускать эту программу только из среды Windows. Это нарушало чистоту Java и препятствовало переносимости создаваемых на нем программ. Компания Microsoft в новом пакете разработчика Visual Studio .NET заменила редактор программ Visual J++ на Visual С#. Язык С#, как мы говорили, очень похож на Java. Совсем недавно компания Microsoft выпустила редактор Microsoft J# .NET.
Основы языка Java Теперь перейдем непосредственно к изучению основ языка программирования Java на конкретном примере. Напишем первую программу на этом языке (листинг 1.1).
Листинг 1.1. Первая программа на языке Java
class MyProgram {
public static void main (String args[]) {
System.out.println ("Это Ваша первая программа на Java");
}}
Разберем эту программу построчно.
Первая строка.
class My Program{
В этой строке мы создаем класс My Program.
Класс состоит из двух типов данных: поля — это данные, которые позволяют описывать свойства класса, и методы — о них мы уже говорили.
В этом классе содержится лишь один метод — main (который является самым главным методом, так как с него начинается выполнение программы), о чем мы и указываем в следующей строке, public static void main (String args[]) {
Объявление класса (т.е. описание его содержимого) происходит между двумя фигурными скобками после имени класса, также, как и объявление метода.
Содержимое между фигурными скобками называется телом метода (содержимое класса, соответственно, называется телом класса).
В вышеуказанной строке мы объявляем метод main.
Слово public говорит нам о том, что доступ к этому методу разрешен для любых объектов. Ключевое слово static говорит нам о том, что этот метод будет выполняться без создания объекта — т.е. в самом начале программы. Метод может передавать данные другому методу или переменной — это называется возвращением значения.
Переменная — это именованная ячейка памяти, в которую можно записывать данные определенного типа. Ключевое слово void говорит нам о том, что этот метод ничего не возвращает. После имени метода в круглых скобках указываются аргументы или параметры метода — данные, которые мы можем передать методу при вызове. В данном случае мы можем передать массив строковых объектов (об этом мы расскажем в последующих главах).
В третьей строке программы из листинга 1.1:
System.out.println ("Это Ваша первая программа на Java");
мы вызываем метод println, принадлежащий объекту out, который в свою очередь принадлежит объекту System.
Данный метод выводит на экран строковый литерал (он заключен в кавычки) — это константа, записанная по правилам Java (какие-либо данные). Любая строка, являющаяся логической единицей (если в ней задается выполнение какого-либо действия), должна завершаться символом В последней строке программы из листинга 1.1: }}
мы закрываем тела метода и класса.
При выполнении этой программы на экране должна появиться такая строка.
Это Ваша первая программа на Java.
В Java неважно, как вы будете размещать строки, лишь бы точки с запятой правильно разделяли код на операторы (<оператор — вызов метода, создание переменной, присваивание ей значения и другие логические действия).
Ту же программу можно записать так, как показано в листинге 1.2, или так, как показано в листинге 1.3.
Листинг 1.2. Другой способ записи первой программы
Код
class
MyProgram
{
public
static
void
main
(
String
Args
[
]
)
{
System
.
out
.
println
(
"Это Ваша
первая программа на Java"
)
;
}
}
Листинг 1.3. Еще один способ записи первой программы
class MyProgram { public static void main (String args[]) { System.out.println ("Эта Ваша первая программа на Java"); )}