Итоги: Фигуры и поведение
Часть раздела Логика и управление потоком путешествия по GO на Coddy — урок 19 из 68.
Задание
ЛегкоВ этом испытании вы создадите систему связи, которая демонстрирует полиморфизм через интерфейсы. Вы создадите интерфейс Speaker и реализуете его с различными типами, которые могут «говорить» своими уникальными способами.
Вы получите три входных значения:
- Строка, представляющая количество создаваемых объектов (например,
"3") - Строка, содержащая типы объектов, разделенные запятыми (например,
"person,parrot,person") - Строка, содержащая имена объектов, разделенные запятыми (например,
"Alice,Polly,Bob")
Ваша задача:
- Определить интерфейс
Speakerс одной сигнатурой метода:Speak(), который возвращает строку - Определить структуру
Personс полемName(string) - Определить структуру
Parrotс полемName(string) - Реализовать метод
Speak()для обеих структур:- Person должен возвращать:
"Hello, I'm [name]" - Parrot должен возвращать:
"Squawk! [name] says hello!"
- Person должен возвращать:
- Создать функцию с именем
makeAllSpeak, которая принимает срез (slice) интерфейсовSpeakerв качестве параметра - Внутри
makeAllSpeakперебрать срез и вызвать методSpeak()для каждого объекта, выводя результат на печать - Разобрать входные данные для создания соответствующих экземпляров объектов на основе предоставленных типов и имен
- Сохранить все объекты в срезе интерфейсов
Speaker - Вызвать
makeAllSpeakс вашим срезом объектов
Объекты должны создаваться в том порядке, в котором они появляются во входных данных. Например, если типы — "person,parrot,person", а имена — "Alice,Polly,Bob", создайте Person по имени Alice, затем Parrot по имени Polly, а затем Person по имени Bob. Это испытание демонстрирует, как различные типы могут обрабатываться единообразно через общий интерфейс, показывая мощь полиморфизма в Go.
Попробуйте сами
package main
import (
"fmt"
"strconv"
"strings"
)
func main() {
// Чтение входных данных
var numSpeakersStr string
var speakerTypesStr string
var speakerNamesStr string
fmt.Scanln(&numSpeakersStr)
fmt.Scanln(&speakerTypesStr)
fmt.Scanln(&speakerNamesStr)
// Парсинг входных данных
numSpeakers, _ := strconv.Atoi(numSpeakersStr)
speakerTypes := strings.Split(speakerTypesStr, ",")
speakerNames := strings.Split(speakerNamesStr, ",")
// TODO: Напишите свой код ниже
// 1. Определите интерфейс Speaker
// 2. Определите структуры Person и Parrot
// 3. Реализуйте методы Speak() для обеих структур
// 4. Создайте функцию makeAllSpeak
// 5. Создайте объекты speaker на основе входных данных и сохраните их в срез
// 6. Вызовите makeAllSpeak с вашим срезом
}Все уроки раздела Логика и управление потоком
1Продвинутое управление потоком выполнения
Switch с использованием `fallthrough`Выход из вложенных цикловПродолжение конкретного циклаОператор `goto`Итоги: Продвинутое управление циклами4Проект: Простой список задач
Настройка проектаДобавление задачи2Структуры и методы
Определение методов для структурПолучатели по значениюПолучатели по указателюВыбор типа получателяМетоды против функцийИтоги: поведение структур5Карты: подробный разбор
Карты структурУказатели как значения картПроверка карт на nilСравнение картИтоги: счетчик частоты слов3Интерфейсы (Основы)
Что такое интерфейс?Определение интерфейсаРеализация интерфейсаИспользование интерфейсных типовПустой интерфейсУтверждение типаПереключатель типовИтоги: Фигуры и поведение