• ,

Уровень 11: план уровня и доп. материалы

План уровня:
  • Основы ООП: основные принципы, наследование, инкапсуляция.
  • Принципы ООП: абстракция, инкапсуляция, наследование и полиморфизм.
  • Принцип слабой связности
  • Абстракция
  • Наследование детально
  • Инкапсуляция детально, преимущества

Курс Java
Что еще можно посмотреть на досуге:
Ссылка на вики по ООП
Интересная статья про наследование



Нашли классную ссылку к материалу данной темы? Добавьте ее сюда в виде комментария.
Возможно, именно Ваша ссылка поможет другому человеку стать программистом и улучшить свою жизнь!

Вернуться к плану обучения

Вернуться к обучению java онлайн на JavaRush

19 комментариев

rmk
  • rmk
  • 0
а где сама лекция?)

план лекции есть, а лекцию где взять?)
iruslan
интернет батенька))
Diana
Лекция внутри курса JavaRush
dimaMJ
Допустим у нас нужно создать домашних животных (кот, собака, корова, свинья). У меня возник вопрос как будет лучше и правильней?
1) Создать класс Pets и в нем задать конструктор с параметрами Pets(String тип животного,String имя, и т.д.) и проверять если допустим тип Собака, то будут вызываться определенные ф-ции, которые подходят только к собаке.
2) Создать класс Pets, и создавать классы кот, собака, корова, свинья и наследовать их от Pets. Но тут вопрос, так как я только учусь) Допустим в Pets есть метод setvoice, который загружает звук, могу ли я в разных классах его вызывать и в параметр передавать определенные звуки или как по другому можно животному присвоить свой звук ?) Обьясните кому не сложно) У нас получается что классы Cat и другие как бы являются экземплярами класса Pets и имеют возможность добавлять свои методы?
tanzwud
Начнем с создания абстрактного класса. Который отвечает за общие для всех петКонечно не каждй Pet может исдавать звуки, но мы посчитаем что это так. В будущем проще использовать интерфейсе к примему Voceable.
Задем создадим класс Dog где уже определим этот самый метод.
одна из разновидностей Pet
Ну а дальше дело техники по образу и подобию создаем коров и тп. Простейшее наследование в работе.
Как все это использовать? Лучше всего глянуть на шаблоны проектирования, к примеру на AbstractFactory. Чтобы не перезагружать информацией, вот простейшее использования получившегося Java Runtime полиморфизма в действии.
main
Ну и на последок UML Диаграма наших классов.

Да как Pet так и разные классы которые его наследуют могут иметь отличные методы а также могут Override, Overload различные методы, наследовать интерфейсы и тп.
dimaMJ
спасибо, более менее понятно) я думаю пока ООП на практике не попробую, то ничего толком не пойму) так на уровне теории понятно, а на уровне практики пока нет, ну все впереди) У меня появился этот вопрос из-за примера в 11 лекции, с шахматами (там где классы фигур), там у меня возник вопрос, если все классы наследуют один класс у которого три переменные, то у каждого класса соответственно значения этих переменных будут разные?
tanzwud
По умолчанию все значения будут братся из родительского класса. Однако наследники могут эти значения переопределять как минимум.
dimaMJ
понятно, спасибо)
Nirvana
Тоже выражу свою благодарность ВАМ) за такой подробный ответ)
shagi
Подскажите, если мы инкапсулируем поля, то зачем тогда потом им создавать методы get и set? Разве по сути это не тоже самое, если бы они были pulbic?
gloomkolomna
cybern.ru/java-access-modifiers.html — может тут найдете ответ?
Asirius
если он будет public, значит к нему есть доступ, следовательно это поле можно изменить непосредственно обратившись к нему… а если оно только для чтения? значит нужно делать get-ер для этого поля.
nomerat
Геттеры и сеттеры вида:


getValue() { 
    return x; 
} 

setValue(Object x) { 
    this.x = x 
}


это простейший случай. Обычно же, некоторое внутренние состояние объекта x может вычисляться по сложному алгоритму (как на вход, так и на выход), в который могут входить проверки на корректность введённых данных или сложные вычисления. Пример был в лекции, пусть x — возраст человека. Тогда:

class Human {
int x; //возраст
String sex; //пол

    setValue(int x) { 
        if ((x < 0) || (x > 125)) {
            //выкинуть исключение
        } else {
            this.x = x 
        }
    }

    getValue() { 
        if ("девушка".equals(sex)) {
            return 18;
        else {
            return x; 
        }
    } 
}
Antenka
Доброе время суток. Не уверена, что пишу в нужный топик (не нашла более подходящего). Есть замечание к лекции «Основные принципы ООП», которая идет в основном курсе первой на 11 уровне. В описании абстракции намешано 2 понятия: абстракция и декомпозиция. Обратите пожалуйста внимание.
dksys
«Интерфейсы — это больше чем интерфейсы»
опечатка — «каждый их которых» (4й абзац)
IvanSPb
Возможно, только у меня возник вопрос, почему в одном файле несколько классов, как так может быть — ведь говорили о том, что один файл — один класс.
На 11 уровне активно используются внутренние классы, так называемые inner classes. Странно, но раньше эта тема никак и нигде не затронута. Есть еще nested classes — вложенные классы.
Поискал на эту тему материал — оказывается, тут есть о чем поговорить и все не так просто, хотя и ничего сверхсложного тоже нет. Рекомендую к прочтению, даже сказал бы must read. Сжатая, но очень емкая статья:
easy-code.ru/lesson/java-nested-classes
MariaM
интересно, насколько хорош пример из 1ой лекции, где кит наследуется от коровы и переопределяются методы. В доп.материалах есть статья, в которой всячески от такого предостерегают. Согласно статье, наследование должно быть только в том случае, если наследник является также и родителем (н-р: корова — животное). А в примере лекции по-моему это не совсем так.
Yuri_0504
  • Yuri_0504
  • 0
  • Комментарий отредактирован 2016-10-02 15:10:53 пользователем Yuri_0504
Вы сильно удивитесь когда узнаете, что и киты и коровы относятся к животным и млекопитающим :D
Впрочем как и люди ;)
Yuri_0504
Прочитал не внимательно — написал глупость. Конечно не стоит кита от коровы наследовать. Вот обоих от класса Animal будет нормально.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.