undefined

Взаимодействие объектов

Java Syntax
2 уровень , 1 лекция
Открыта

— Привет, Амиго. Сегодня я хочу рассказать тебе, как устроена типичная программа на Java. Главная новость: Каждая программа на Java состоит из классов и объектов.

— Что такое классы, я уже знаю. А что такое объекты?

— Начну с аналогии. Представь, что ты хочешь сделать небольшой корабль. Сначала нужно сделать чертёж, затем отдать его на завод, где по этому чертежу соберут корабль. Или десяток. Да, вообще, сколько угодно кораблей. По одному чертежу строятся десятки идентичных кораблей, вот что важно.

— В программировании на Java все точно так же.

Программист – он как проектировщик. Только проектировщик рисует чертежи, а Java-программист пишет классы. Затем на основе чертежей создаются детали, а на основе классов – объекты.

— Сначала мы пишем классы (делаем чертежи), а потом, во время исполнения программы, на основе этих классов Java-машина создает объекты. Точно так же, как корабли создаются на основе чертежей. Чертёж один, но кораблей много. Корабли разные, у них разные имена, они возят разные грузы. Но они очень похожие: они все — корабли с идентичной конструкцией, и могут выполнять аналогичные задачи.

— На примере кораблей все понятно. А можно еще пару аналогий, чтобы я точно понял, о чем речь?

— Вот, например, пчелы…

Взаимодействие объектов - 1

— Хотя нет, что-то с пчелами у меня плохие ассоциации. Возьмем лучше муравейник.

— Муравейник – это хороший пример взаимодействия объектов. В простейшем муравейнике есть три класса муравьёв: королева, воины и рабочие муравьи. Количество муравьёв каждого класса – разное. Королева – одна на весь муравейник, воинов – десятки, а рабочих муравьёв – сотни. Три класса и сотни объектов. Муравьи взаимодействуют друг с другом, с такими же муравьями и муравьями других классов по жёстко заданным правилам.

— Это просто идеальный пример. В типичной программе все точно так же. Есть главный объект, который создаёт объекты всех остальных классов. Объекты начинают взаимодействовать друг с другом и «внешним миром» программы. Внутри этих объектов жёстко запрограммировано их поведение.

— Не совсем понятно. Вернее, совсем не понятно.

— Два этих пояснения – это две стороны одной медали. Истина посередине. Первый пример (про чертеж и корабли) показывает связь между классом и объектами этого класса. Аналогия очень сильная. Второй пример (про муравейник) показывает связь между объектами, которые существуют во время работы программы, и написанными классами.

— Ты хочешь сказать, что сначала мы должны написать классы для всех существующих в программе объектов, а потом ещё и описать их взаимодействие?

— Да, но это легче чем кажется. В Java все сущности во время работы программы являются объектами, а написание программы сводится к описанию различных способов взаимодействия объектов. Объекты просто вызывают методы друг друга и передают в них нужные данные.

— Не совсем очевидно, но почти понятно.

— А как узнать, какие методы вызывать, и какие данные туда передавать?

— У каждого класса есть описание, в котором говорится – для чего он создан. Также и у каждого его метода есть описание: что он делает, и какие данные нужно в него передавать. Чтобы использовать класс, нужно в общих чертах знать, что он делает. А также нужно точно знать, что делает каждый его метод. И совсем не обязательно знать, как он это делает. Такая себе волшебная палочка.

— Хм. Звучит заманчиво.

— Вот посмотри на код класса, который копирует файл:

Копирование файла c:data.txt в файл c:result.txt
package com.javarush.lesson2;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class FileCopy
{
    public static void main(String[] args) throws IOException
    {
        FileInputStream  fileInputStream = new FileInputStream("c:\\data.txt");
        FileOutputStream  fileOutputStream = new FileOutputStream("c:\\result.txt");

        while (fileInputStream.available() > 0)
        {
            int data = fileInputStream.read();
            fileOutputStream.write(data);
        }

        fileInputStream.close();
        fileOutputStream.close();
    }
}

— Не то, чтобы все понятно, но суть уже улавливаю.

— Отлично. Тогда – до следующего урока.

— Чуть не забыла. Вот тебе задачка от Диего.

undefined
3
Задача
Java Syntax,  2 уровень,  1 лекция
Недоступна
Реализуем метод print
Собственные методы — путь к неограниченной свободе, но также большая ответственность. Реализуем методы аккуратно и продуманно. В этой задаче нам предстоит написать метод print, который будет выводить на экран некую строку. И не один раз, а сразу четыре. Строка — аргумент метода, то есть будет подаваться на входе.
Комментарии (1211)
Чтобы просмотреть все комментарии или оставить свой,
перейдите в полную версию
Vovan 3 уровень
12 апреля 2021
Вопрос по примеру в цикле while (fileInputStream.available() > 0) { int data = fileInputStream.read(); fileOutputStream.write(data); } каждый раз происходит объявление переменной data, ошибки не будет ? Или это строка имеет какой то сакральный смысл ? Если вынести объявление переменной за цикл программа будет работать корректно ?
Игорь Борсук 2 уровень
7 апреля 2021
както удивидельно что дошол до второго уровня лекцый но по сути ничего не понял ,только усвоил инфу о целых числах,тексте,дробных числах . и как выводить надпись ,как тогда дальше улавлить суть ?
Sergiy Ivanov 2 уровень, Одесса
24 марта 2021
"package com.javarush.lesson2; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; " - Что это всё? Следует ли этому сейчас уделять внимание? public static void main(String[] args) throws IOException - как это читать? что такое "throws"? "FileInputStream fileInputStream = new FileInputStream("c:\\data.txt"); FileOutputStream fileOutputStream = new FileOutputStream("c:\\result.txt");" - что такое FileInputStream? Почему он указан подряд 2 раза? Аналогично FileOutputStream??? что здесь означает "new", available, read, write, close???? Почему не разбирают эти вещи для учеников?
Sergiy Ivanov 2 уровень, Одесса
24 марта 2021
Вообще непонятна логика, к сожалению. В виде блок схем надо бы показать, чтобы было понятно, как следует алгоритм: шаг за шагом... Складывается ощущение какой-то непоследовательности
Anna Sbitneva 3 уровень, Одесса
20 марта 2021
Всем Привет! Знаете, что непонятно мне. Вот мы выводим на печать строковую переменную text метода print 4 раза. И непонятно, почему сначала одна строка "Java is easy to learn!" 4 раза выводится, потом вторая 4 повторения и т д. (это как раз верный вывод). Но мне непонятно почему. а не вот так. Java is easy to learn! Java is object-oriented! Java is platform-independent! И потом еще 3 раза так.
blick 2 уровень
2 марта 2021
вот не как не пойму, делаю задачки - как по факту все закрыты... но материи нет открыть след. урок, и текущая таска только по премиуму... ув. Администраци - без према тут нельзя учиться ?
Алексей Бел 7 уровень
1 марта 2021
Пытаюсь скопировать файл как в примере. Создал 2 txt файла. Прописал к ним адреса как нужно. Дал полное разрешение для них на сё, что только можно. Но всё равно пишет: отказано в доступе.
Timmy Ocean 4 уровень, Минск
23 февраля 2021
Решается без for. Как писали ниже, просто нужно внимательно читать задание)
Влад Зябченко 2 уровень, Polska
23 февраля 2021
м-да...тема лекции и задача не совпадают, от слова, совсем...ну или я дурак, смог решить только при помощи цикла for, странный способ учить людей давая задачи с элементами будущих лекций.
Hummock 3 уровень, Москва
20 февраля 2021
Какие циклы?!, о чем вы тут?! задача начального уровня, не нужны здесь циклы. Судя по всему, те кто советует циклы самим надо еще поучитца!