ООП, Инкапсуляция в Java. Часть 1.
Инкапсуляция – это одна из четырёх фундаментальных концепций ООП. Названия оставшихся трёх: наследование, полиморфизм, абстракция.
Инкапсуляция в Java является механизмом обёртывания данных (переменных) и кода, работающего с данными (методами), в одно целое. В инкапсуляции переменные класса будут скрыты от других классов и доступ к ним может быть получен только с помощью метода их текущего класса. По-другому это называется скрытием данных.
Для достижения инкапсуляции в Java:
1) Объявите переменные класса как private;
2) Предоставьте public к методам установки и получения (сеттеру и геттеру) для изменения и просмотра значений переменных.
Рассмотрим пример Инкапсуляции на Картинке 1.
У нас есть некий класс EncapsulationClass со своими атрибутами – 3 private поля: name, id и age. А значит напрямую эти поля недоступны из других классов. Но также у нас есть публичные (public) методы, взаимодействующие с этими приватными полями. Следовательно, эти методы доступны в других классах.
Публичные методы setXXX() и getXXX() являются точками доступа переменных экземпляра класса EncapsulationClass. Обычно эти методы упоминаются как геттеры и сеттеры (Getters and Setters).
Следовательно, любой класс, который хочет получить доступ к переменным, должен получить к ним доступ через эти геттеры и сеттеры.
Доступ к переменным класса EncapsulationClass можно получить следующей программой (Картинка 2).
Мы получим следующий результат:
Имя: Олег, возраст: 28.
👉 JavaStart. Подписаться
Инкапсуляция – это одна из четырёх фундаментальных концепций ООП. Названия оставшихся трёх: наследование, полиморфизм, абстракция.
Инкапсуляция в Java является механизмом обёртывания данных (переменных) и кода, работающего с данными (методами), в одно целое. В инкапсуляции переменные класса будут скрыты от других классов и доступ к ним может быть получен только с помощью метода их текущего класса. По-другому это называется скрытием данных.
Для достижения инкапсуляции в Java:
1) Объявите переменные класса как private;
2) Предоставьте public к методам установки и получения (сеттеру и геттеру) для изменения и просмотра значений переменных.
Рассмотрим пример Инкапсуляции на Картинке 1.
У нас есть некий класс EncapsulationClass со своими атрибутами – 3 private поля: name, id и age. А значит напрямую эти поля недоступны из других классов. Но также у нас есть публичные (public) методы, взаимодействующие с этими приватными полями. Следовательно, эти методы доступны в других классах.
Публичные методы setXXX() и getXXX() являются точками доступа переменных экземпляра класса EncapsulationClass. Обычно эти методы упоминаются как геттеры и сеттеры (Getters and Setters).
Следовательно, любой класс, который хочет получить доступ к переменным, должен получить к ним доступ через эти геттеры и сеттеры.
Доступ к переменным класса EncapsulationClass можно получить следующей программой (Картинка 2).
Мы получим следующий результат:
Имя: Олег, возраст: 28.
👉 JavaStart. Подписаться
👍10❤3✍2🔥2
ООП, Инкапсуляция в Java. Часть 2.
Скрытие информации в Java. Модификаторы доступа.
Как мы уже рассмотрели ранее, мы используем концепцию инкапсуляции для реализации механизма сокрытия информации.
Этот подход, как и абстракция, один из наиболее часто используемых механизмов в Java. Механизм сокрытия делает атрибуты класса недоступными извне и защищенными от нежелательных/случайных действий.
Говоря об этой концепции, не лишним будет разобрать инструменты для обозначения доступности элементов – модификаторы доступа. Java поддерживает четыре модификатора доступа, используемые для определения видимости классов, методов и атрибутов. Каждый из них указывает уровень доступности, и мы можем использовать только один для каждого класса, метода или атрибута.
Перечислим их, начиная с наиболее ограничивающих:
1) private;
2) no modifier (package);
3) protected;
4) public.
Теперь подробнее:
1) Модификатор private.
Самый ограничивающий и наиболее часто используемый модификатор доступа private делает атрибут или метод доступным только в пределах одного и того же класса. Подклассы или любые другие классы не могут получить доступ к этому атрибуту или методу. Используем его только для атрибутов и методов, которые мы больше никогда не захотим вызвать.
2) Модификатор no modifier (package).
Отсутствие модификатора означает, что вы можете получить доступ к атрибутам и методам внутри вашего класса и из всех классов в одном пакете. Вот почему его часто называют пакетным.
3) Модификатор protected.
Атрибуты и методы с модификатором доступа protected могут быть доступны внутри вашего класса, всеми классами в одном пакете, а также всеми наследниками в любых пакетах. Этот модификатор, как правило, используется для внутренних методов, которые должны вызываться или переопределяться классами наследниками.
4) Модификатор public.
Доступ к методам и атрибутам, использующим модификатор public, можно получить как в текущем классе, так и во всех других классах.
👉 JavaStart. Подписаться
Скрытие информации в Java. Модификаторы доступа.
Как мы уже рассмотрели ранее, мы используем концепцию инкапсуляции для реализации механизма сокрытия информации.
Этот подход, как и абстракция, один из наиболее часто используемых механизмов в Java. Механизм сокрытия делает атрибуты класса недоступными извне и защищенными от нежелательных/случайных действий.
Говоря об этой концепции, не лишним будет разобрать инструменты для обозначения доступности элементов – модификаторы доступа. Java поддерживает четыре модификатора доступа, используемые для определения видимости классов, методов и атрибутов. Каждый из них указывает уровень доступности, и мы можем использовать только один для каждого класса, метода или атрибута.
Перечислим их, начиная с наиболее ограничивающих:
1) private;
2) no modifier (package);
3) protected;
4) public.
Теперь подробнее:
1) Модификатор private.
Самый ограничивающий и наиболее часто используемый модификатор доступа private делает атрибут или метод доступным только в пределах одного и того же класса. Подклассы или любые другие классы не могут получить доступ к этому атрибуту или методу. Используем его только для атрибутов и методов, которые мы больше никогда не захотим вызвать.
2) Модификатор no modifier (package).
Отсутствие модификатора означает, что вы можете получить доступ к атрибутам и методам внутри вашего класса и из всех классов в одном пакете. Вот почему его часто называют пакетным.
3) Модификатор protected.
Атрибуты и методы с модификатором доступа protected могут быть доступны внутри вашего класса, всеми классами в одном пакете, а также всеми наследниками в любых пакетах. Этот модификатор, как правило, используется для внутренних методов, которые должны вызываться или переопределяться классами наследниками.
4) Модификатор public.
Доступ к методам и атрибутам, использующим модификатор public, можно получить как в текущем классе, так и во всех других классах.
👉 JavaStart. Подписаться
👍5🔥3✍1👨💻1
Что такое статический метод в Java?
Anonymous Quiz
16%
Метод, который может быть вызван только экземпляром класса
4%
Метод, который изменяет статические переменные класса
2%
Метод, который может быть переопределен в дочерних классах
76%
Метод, который может быть вызван без создания экземпляра класса
2%
Посмотреть ответ
👍4✍3🎉2
ООП, Инкапсуляция в Java. Часть 3.
Выводы.
Инкапсуляция описывает объединение данных и методов, работающих с этими данными, в один модуль и используется для реализации механизма сокрытия информации. Это концепция ООП помогает нам защитить пользовательскую информацию от ошибочных действий, тем самым повышая эффективность дальнейшей работы с кодом.
Преимущества инкапсуляции.
1) Поля класса можно сделать только для чтения или только для записи;
2) Класс может иметь полный контроль над тем, что хранится в его полях.
👉 JavaStart. Подписаться
Выводы.
Инкапсуляция описывает объединение данных и методов, работающих с этими данными, в один модуль и используется для реализации механизма сокрытия информации. Это концепция ООП помогает нам защитить пользовательскую информацию от ошибочных действий, тем самым повышая эффективность дальнейшей работы с кодом.
Преимущества инкапсуляции.
1) Поля класса можно сделать только для чтения или только для записи;
2) Класс может иметь полный контроль над тем, что хранится в его полях.
👉 JavaStart. Подписаться
👍7🔥2✍1
Архитектура приложений. Часть 1. Микросервисная архитектура.
Давайте поговорим о микросервисной архитектуре. На собеседованиях иногда могут спросить о вашем понимании микросервисов в целом.
Что такое микросервисы?
Микросервисы – это подход к разработке приложений, при котором оно разбивается на небольшие, независимые компоненты, называемые микросервисами. Каждый микросервис представляет собой отдельную функциональность, выполняет свою задачу и взаимодействует с другими микросервисами через API (Application Programming Interface).
Преимущества микросервисной архитектуры:
🚀 Масштабируемость
Мы можем масштабировать только те компоненты, которые нуждаются в дополнительных ресурсах, что позволяет оптимизировать использование ресурсов.
🎯 Гибкость и независимость
Каждый микросервис может быть разработан, развернут и обновлен независимо. Это облегчает поддержку, устранение ошибок и внесение изменений.
🌐 Распределенность
Микросервисы могут быть написаны на разных языках программирования и развернуты на разных серверах, что способствует разнообразию технологий и улучшает эффективность команды.
💡 Инновации и эксперименты
Благодаря независимости микросервисов, мы можем быстро внедрять новые идеи и технологии, не затрагивая всё приложение.
Недостатки микросервисной архитектуры:
⚖️ Сложность управления
С ростом количества микросервисов возникает сложность управления, мониторинга и отладки всей системы.
🧩 Сетевое взаимодействие
Коммуникация между микросервисами требует хорошо продуманного и надежного сетевого взаимодействия.
📚 Дублирование кода
В ряде случаев, разные микросервисы могут иметь дублирующийся функционал или код, что требует дополнительного внимания при обновлениях.
Пример из практики:
Uber: Микросервисы позволяют Uber обеспечивать гладкое взаимодействие между водителями и пассажирами, обрабатывать огромное количество запросов и обеспечивать высокую доступность.
👉 JavaStart. Подписаться
Давайте поговорим о микросервисной архитектуре. На собеседованиях иногда могут спросить о вашем понимании микросервисов в целом.
Что такое микросервисы?
Микросервисы – это подход к разработке приложений, при котором оно разбивается на небольшие, независимые компоненты, называемые микросервисами. Каждый микросервис представляет собой отдельную функциональность, выполняет свою задачу и взаимодействует с другими микросервисами через API (Application Programming Interface).
Преимущества микросервисной архитектуры:
🚀 Масштабируемость
Мы можем масштабировать только те компоненты, которые нуждаются в дополнительных ресурсах, что позволяет оптимизировать использование ресурсов.
🎯 Гибкость и независимость
Каждый микросервис может быть разработан, развернут и обновлен независимо. Это облегчает поддержку, устранение ошибок и внесение изменений.
🌐 Распределенность
Микросервисы могут быть написаны на разных языках программирования и развернуты на разных серверах, что способствует разнообразию технологий и улучшает эффективность команды.
💡 Инновации и эксперименты
Благодаря независимости микросервисов, мы можем быстро внедрять новые идеи и технологии, не затрагивая всё приложение.
Недостатки микросервисной архитектуры:
⚖️ Сложность управления
С ростом количества микросервисов возникает сложность управления, мониторинга и отладки всей системы.
🧩 Сетевое взаимодействие
Коммуникация между микросервисами требует хорошо продуманного и надежного сетевого взаимодействия.
📚 Дублирование кода
В ряде случаев, разные микросервисы могут иметь дублирующийся функционал или код, что требует дополнительного внимания при обновлениях.
Пример из практики:
Uber: Микросервисы позволяют Uber обеспечивать гладкое взаимодействие между водителями и пассажирами, обрабатывать огромное количество запросов и обеспечивать высокую доступность.
👉 JavaStart. Подписаться
👍4🔥3❤2✍1
Что такое исключение (exception) в Java?
Anonymous Quiz
3%
Особый тип данных
2%
Структура данных для хранения объектов
95%
Объект, представляющий ошибку или непредвиденное событие
0%
Тип массива
0%
Посмотреть ответ
👍5🎉2👨💻1
Архитектура приложений. Часть 2. Монолитная архитектура.
Сегодня давайте углубимся в мир монолитных приложений и узнаем, почему это хороший вариант для старта в программировании. На собеседованиях иногда могут спросить о вашем понимании монолитной архитектуры в целом.
Что такое монолит?
Монолит – это архитектурный подход, при котором все компоненты приложения объединены в одну большую программу. Весь код, базы данных и функциональности находятся внутри этого "единого" приложения.
Преимущества монолитной архитектуры:
🚀 Простота начала
Разработка и развертывание монолитного приложения обычно проще, особенно для начинающих.
🔄 Меньше сложности
Все компоненты находятся в одном месте, что упрощает отладку и обслуживание.
📦 Простота масштабирования
При необходимости можно масштабировать весь монолит.
Когда выбрать монолит?
🔹 Если наш проект небольшой и нам важно быстро начать.
🔹 Если команда разработчиков ограничена и нам нужно облегчить управление проектом.
Секрет успешной монолитной архитектуры:
🧩 Хорошая структура кода
Желательно разделять код на логические модули, чтобы упростить понимание и поддержку.
🛠️ Обновления
Желательно регулярно обновлять библиотеки и компоненты для поддержания безопасности и актуальности.
Так что, несмотря на рост популярности микросервисов, монолиты остаются надежным и удобным вариантом для начинающих программистов и небольших проектов.
Проявите креативность, структурируйте код и продолжайте учиться – и ваши монолиты будут стремительно расти вместе с вами!
👉 JavaStart. Подписаться
Сегодня давайте углубимся в мир монолитных приложений и узнаем, почему это хороший вариант для старта в программировании. На собеседованиях иногда могут спросить о вашем понимании монолитной архитектуры в целом.
Что такое монолит?
Монолит – это архитектурный подход, при котором все компоненты приложения объединены в одну большую программу. Весь код, базы данных и функциональности находятся внутри этого "единого" приложения.
Преимущества монолитной архитектуры:
🚀 Простота начала
Разработка и развертывание монолитного приложения обычно проще, особенно для начинающих.
🔄 Меньше сложности
Все компоненты находятся в одном месте, что упрощает отладку и обслуживание.
📦 Простота масштабирования
При необходимости можно масштабировать весь монолит.
Когда выбрать монолит?
🔹 Если наш проект небольшой и нам важно быстро начать.
🔹 Если команда разработчиков ограничена и нам нужно облегчить управление проектом.
Секрет успешной монолитной архитектуры:
🧩 Хорошая структура кода
Желательно разделять код на логические модули, чтобы упростить понимание и поддержку.
🛠️ Обновления
Желательно регулярно обновлять библиотеки и компоненты для поддержания безопасности и актуальности.
Так что, несмотря на рост популярности микросервисов, монолиты остаются надежным и удобным вариантом для начинающих программистов и небольших проектов.
Проявите креативность, структурируйте код и продолжайте учиться – и ваши монолиты будут стремительно расти вместе с вами!
👉 JavaStart. Подписаться
👍6❤2✍2🔥1
Архитектура приложений. Часть 3. Отличие Микросервисов от Монолита.
Сегодня давайте сравним два популярных подхода к разработке приложений: микросервисы и монолит.
Монолит:
🔹 Один блок
Весь код, базы данных и компоненты находятся в одном приложении.
🔹 Простота начала
Создание и развертывание монолита обычно проще.
🔹 Единое развертывание
Приложение разворачивается целиком, что может быть проще для управления.
🔹 Обслуживание
Если один единый монолитный сервис сломался, то все приложение не будет работать до исправления проблемы.
Микросервисы:
🔹 Множество компонентов
Приложение разбито на небольшие независимые микросервисы.
🔹 Масштабируемость
Микросервисы могут быть масштабированы независимо.
🔹 Гибкость
Возможность использовать разные технологии для разных микросервисов.
🔹 Обслуживание
Если сломался один или даже несколько отдельных сервисов, то приложение может продолжать свою работу в целом.
Как выбрать подход?
🔹 Монолит, если вы только начинаете и хотите простоту разработки и развертывания.
🔹 Микросервисы, если проект сложный, требует гибкости и быстрого масштабирования.
Важно подбирать подход в зависимости от целей, размера проекта и команды разработчиков. Оба варианта имеют свои плюсы и минусы. Помните, в разработке нет одного "правильного" пути – нужно выбирать наиболее подходящий для конкретной ситуации!
👉 JavaStart. Подписаться
Сегодня давайте сравним два популярных подхода к разработке приложений: микросервисы и монолит.
Монолит:
🔹 Один блок
Весь код, базы данных и компоненты находятся в одном приложении.
🔹 Простота начала
Создание и развертывание монолита обычно проще.
🔹 Единое развертывание
Приложение разворачивается целиком, что может быть проще для управления.
🔹 Обслуживание
Если один единый монолитный сервис сломался, то все приложение не будет работать до исправления проблемы.
Микросервисы:
🔹 Множество компонентов
Приложение разбито на небольшие независимые микросервисы.
🔹 Масштабируемость
Микросервисы могут быть масштабированы независимо.
🔹 Гибкость
Возможность использовать разные технологии для разных микросервисов.
🔹 Обслуживание
Если сломался один или даже несколько отдельных сервисов, то приложение может продолжать свою работу в целом.
Как выбрать подход?
🔹 Монолит, если вы только начинаете и хотите простоту разработки и развертывания.
🔹 Микросервисы, если проект сложный, требует гибкости и быстрого масштабирования.
Важно подбирать подход в зависимости от целей, размера проекта и команды разработчиков. Оба варианта имеют свои плюсы и минусы. Помните, в разработке нет одного "правильного" пути – нужно выбирать наиболее подходящий для конкретной ситуации!
👉 JavaStart. Подписаться
👍6✍2🔥2❤1
Какой артефакт SCRUM представляет собой список всех задач, которые разработчики планируют выполнить в текущем спринте?
Anonymous Quiz
11%
Бэклог продукта (Product Backlog)
6%
Инкремент (Инкремент)
40%
Спринтовый бэклог (Sprint Backlog)
32%
Спринт (Sprint)
10%
Посмотреть ответ
✍4👍3🔥1🤓1
IS-A отношения в Java. Часть 1.
IS-A отношения в Java – это способ показать, что конкретный объект является типом другого объекта.
Давайте посмотрим, как ключевое слово extends используется для достижения наследования в Java.
public class Animal {
}
public class Mammal extends Animal {
}
public class Reptile extends Animal {
}
public class Dog extends Mammal {
}
На основе приведенного на Картинке примера, в объектно-ориентированных терминах верно следующее:
Класс Животное – суперкласс.
Млекопитающее – подкласс Животного.
Рептилия и Млекопитающее – подклассы Животного.
Собака является подклассом Млекопитающего и Животного.
👩💻 Наш практический курс Java–разработчика
👉 JavaStart. Подписаться
IS-A отношения в Java – это способ показать, что конкретный объект является типом другого объекта.
Давайте посмотрим, как ключевое слово extends используется для достижения наследования в Java.
public class Animal {
}
public class Mammal extends Animal {
}
public class Reptile extends Animal {
}
public class Dog extends Mammal {
}
На основе приведенного на Картинке примера, в объектно-ориентированных терминах верно следующее:
Класс Животное – суперкласс.
Млекопитающее – подкласс Животного.
Рептилия и Млекопитающее – подклассы Животного.
Собака является подклассом Млекопитающего и Животного.
👉 JavaStart. Подписаться
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🔥2✍1❤1
IS-A отношения в Java. Часть 2.
Ключевое слово instanceof.
Для определения типа объекта (является ли конкретный объект является типом другого объекта) в Java используется ключевое слово instanceof.
Давайте посмотрим на код на Картинках.
Объект m класса Mammal является типом объекта Animal, потому что класс Mammal наследуется от супер-класса Animals.
Объект d класса Dog является типом объекта Mammal, потому что класс Dog наследуется от класса Mammal.
При этом объект d класса Dog еще и является типом объекта Animal, потому что класс Mammal наследуется от класса Animal.
Как я уже говорил ранее - в Java нет множественного наследования (class X extends Y, Z, …), но классы могут наследоваться по цепочке (class X extends Y, class Y extends Z).
👩💻 Наш практический курс Java–разработчика
✅ JavaStart. Подписаться
Ключевое слово instanceof.
Для определения типа объекта (является ли конкретный объект является типом другого объекта) в Java используется ключевое слово instanceof.
Давайте посмотрим на код на Картинках.
Объект m класса Mammal является типом объекта Animal, потому что класс Mammal наследуется от супер-класса Animals.
Объект d класса Dog является типом объекта Mammal, потому что класс Dog наследуется от класса Mammal.
При этом объект d класса Dog еще и является типом объекта Animal, потому что класс Mammal наследуется от класса Animal.
Как я уже говорил ранее - в Java нет множественного наследования (class X extends Y, Z, …), но классы могут наследоваться по цепочке (class X extends Y, class Y extends Z).
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
✍6👍5❤2
Please open Telegram to view this post
VIEW IN TELEGRAM
😁9👍2💯1
Что такое SQL инъекция?
Anonymous Quiz
3%
Процесс внедрения CSS стилей напрямую в код
14%
Технология для обеспечения безопасности передачи данных между клиентом и сервером
67%
Способ взлома системы путем внедрения вредоносного кода в SQL запросы
10%
Метод оптимизации кода путем устранения избыточных инструкций
6%
Посмотреть ответ
👍4✍2🔥1
ООП, Полиморфизм в Java. Часть 1.
Полиморфизм, если перевести, - это значит "много форм". Например, актер в театре может примерять на себя много ролей - или принимать "много форм".
Так же и наш код - благодаря полиморфизму он становится более гибким, чем в языках программирования, которые не используют принципы ООП.
Переопределение методов родителя.
Когда мы наследуем какой-либо класс, мы наследуем и все его методы. Но если нам хочется изменить какой-либо из методов, который мы наследуем, мы можем всего-навсего переопределить его.
Мы не обязаны, например, создавать отдельный метод с похожим названием для наших нужд, а унаследованный метод будет без дела лежать в нашем классе.
Именно то, что мы можем создать в классе-наследнике класс с таким же названием, как и класс, который мы унаследовали от родителя, и называется переопределением.
Представим, что у нас есть такая структура как на Картинке.
Вверху иерархии классов стоит класс Animal. Его наследуют два класса - Cat и Dog.
У класса "Animal" есть метод "голос" (voice). Этот метод выводит на экран сообщение "Голос".
Естественно, ни собака, ни кошка не говорят "Голос" 🙂 Они гавкают и мяукают. Соответственно, нам нужно задать другой метод для классов Cat и Dog - чтобы кошка мяукала, а собака гавкала.
Поэтому, в классах-наследниках мы переопределяем метод voice(), чтобы мы в консоли получали "Мяу" и "Гав".
Обратите внимание: перед методом, который мы переопределяем, пишем "@Override". Это дает понять компилятору, что мы хотим переопределить метод.
Тем не менее, полиморфизм - это принцип. Все реальные примеры, которые можно привести - это только способы реализации полиморфизма. Рассмотрим еще пример в одном из след постах.
👩💻 Наш практический курс Java–разработчика
✅ JavaStart. Подписаться
Полиморфизм, если перевести, - это значит "много форм". Например, актер в театре может примерять на себя много ролей - или принимать "много форм".
Так же и наш код - благодаря полиморфизму он становится более гибким, чем в языках программирования, которые не используют принципы ООП.
Переопределение методов родителя.
Когда мы наследуем какой-либо класс, мы наследуем и все его методы. Но если нам хочется изменить какой-либо из методов, который мы наследуем, мы можем всего-навсего переопределить его.
Мы не обязаны, например, создавать отдельный метод с похожим названием для наших нужд, а унаследованный метод будет без дела лежать в нашем классе.
Именно то, что мы можем создать в классе-наследнике класс с таким же названием, как и класс, который мы унаследовали от родителя, и называется переопределением.
Представим, что у нас есть такая структура как на Картинке.
Вверху иерархии классов стоит класс Animal. Его наследуют два класса - Cat и Dog.
У класса "Animal" есть метод "голос" (voice). Этот метод выводит на экран сообщение "Голос".
Естественно, ни собака, ни кошка не говорят "Голос" 🙂 Они гавкают и мяукают. Соответственно, нам нужно задать другой метод для классов Cat и Dog - чтобы кошка мяукала, а собака гавкала.
Поэтому, в классах-наследниках мы переопределяем метод voice(), чтобы мы в консоли получали "Мяу" и "Гав".
Обратите внимание: перед методом, который мы переопределяем, пишем "@Override". Это дает понять компилятору, что мы хотим переопределить метод.
Тем не менее, полиморфизм - это принцип. Все реальные примеры, которые можно привести - это только способы реализации полиморфизма. Рассмотрим еще пример в одном из след постах.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7✍3⚡1👨💻1
Какое событие SCRUM помогает команде инспектировать свой прогресс и вносить необходимые корректировки в ходе спринта?
Anonymous Quiz
30%
Ретроспектива (Retrospective)
4%
Планирование спринта (Sprint Planning)
4%
Демонстрация (Demo)
48%
Ежедневные совещания (Daily stand-ups)
6%
Груминг (Grooming)
8%
Посмотреть ответ
👍3✍2🔥1🎉1