JavaRush /Курсы /Java Syntax /Взаимодействие объектов

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

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();
    }
}

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

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

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

Комментарии (1277)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
MYVas Уровень 10
27 января 2025
Меня всегда путает комментарий "//напишите тут ваш код", а в классах Worker и Soldier этого комментария нет...и я всё думаю, что больше код менять нигде не нужно. Лучше тогда вообще без такого комментария, тем более когда уже 8-й уровень проходишь...Мне кажется такой комментарий не нужен. Меня сбивает с толку...
vlafriday Уровень 1
25 января 2024
24.01.2024 check, мой уровень 2
Cat_Virus Уровень 9
14 января 2024
Почему циклы не проходили? Они же вроде на 4 уровне, а сейчас уже 8. Я использовал в задаче цикл for each. Каждому объекту созданного множества объектов выполнить метод.
26 декабря 2023
Откровенно говоря, вообще непонятно. Только благодаря комментарием получилось решить, а не полученным знаниями с лекции
А Уровень 3 Expert
25 мая 2023
спасибо что объяснил, плохо что я ничего не понял
Сергей Уровень 23
19 мая 2023
как можно решить без цикла ?
22 марта 2023
Пронісся скрізь 0 та 1ий рівень за пару годин. Вриваюсь в другий і туплю. От навіщо називати метод print? Перше що приходить на думку це якась існуюча команда в джаві. Не зрозуміло що вона робить в мейн якщо нічого не виводиться. І доки вона там є ти не розумієш чому вона присутня нижче. Усього навсього трішки змінена назва метода print на printme не робить такого хаосу в думках Трішки підсмажився, почитав коменти. Написав свій. Плюнув. Потім збагнув як можна обійтись без підказок від користувачів з великим левелом, бо цикли починаються в курсі на пракинці 4го рівня. Короче все дуже просто, коли треба сфокусуватися на text і розумієш до чого там та print і яку роль відіграє
Олег Сергеевич Уровень 9 Expert
31 января 2023
Решил задачу с первого раза. Т.к код писал на IDEA и там ее тестировал. Сразу в голову пришла мысль, использовать чикл for.
Paul Уровень 12
20 ноября 2022
Вроде все очень просто и решается в 4 строчки без циклов, но из той теории что была фиг догадаешься
zero to hero Уровень 44
2 марта 2023
Очень интересна реализация задачи без циклов.
Aлександр 52 Уровень 21
17 ноября 2022
Решил лишь с девятого раза. Поэтому если кто, как и я, не проявил догадливость при решении этой задачи - обращайтесь. Возможно, ко мне будет психологически проще обратиться: не будете опасаться снобизма более способных))
2 октября 2023
Привет! Подскажи пжс, как решил? По идее, циклы то мы не проходили на данный момент. Остается через обычный sout помноженный на кол-во повторов?