Menu
CoddyTech

Повторение — формы и поведение

Часть раздела Логика и управление потоком путешествия по GO на Coddy. Урок 19 из 68.

challenge icon

Задание

Легко

В этом задании вы создадите систему коммуникации, демонстрирующую полиморфизм с помощью интерфейсов. Вы создадите интерфейс Speaker и реализуете его для разных типов, которые смогут «говорить» по-своему.

Вы получите три входных значения:

  • Строку, представляющую количество создаваемых говорящих (например, "3")
  • Строку с типами говорящих, разделёнными запятыми (например, "person,parrot,person")
  • Строку с именами говорящих, разделёнными запятыми (например, "Alice,Polly,Bob")

Ваша задача:

  1. Определить интерфейс Speaker с одной сигнатурой метода: Speak(), который возвращает строку
  2. Определить структуру Person с полем Name типа string
  3. Определить структуру Parrot с полем Name типа string
  4. Реализовать метод Speak() для обеих структур:
    • Метод Person должен возвращать: "Hello, I'm [name]"
    • Метод Parrot должен возвращать: "Squawk! [name] says hello!"
  5. Создать функцию с именем makeAllSpeak, которая принимает в качестве параметра срез интерфейсов Speaker
  6. Внутри makeAllSpeak перебрать элементы среза, вызвать метод Speak() для каждого говорящего и вывести результат
  7. Разобрать входные данные, чтобы создать соответствующие экземпляры говорящих на основе указанных типов и имён
  8. Сохранить всех говорящих в срезе интерфейсов Speaker
  9. Вызвать 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. Создайте объекты говорящих на основе входных данных и сохраните их в срезе
	// 6. Вызовите makeAllSpeak, передав ей свой срез
	
}

Все уроки раздела Логика и управление потоком

Потренируйтесь самостоятельно: Онлайн-компилятор Go