Powtórka — generyczne przechowywanie danych
Część sekcji Programowanie obiektowe ścieżki Dart w Coddy. Lekcja 69 z 110.
Wyzwanie
ŁatwyStwórzmy generyczny system przechowywania, który łączy wszystko, czego nauczyłeś się o kolekcjach i typach generycznych! Utworzysz klasę Storage<T>, która może przechowywać elementy dowolnego typu, pobierać je i umożliwiać iterowanie po nich za pomocą pętli for-in.
Podzielisz kod na dwa pliki:
storage.dart: Utwórz generyczny system przechowywania składający się z dwóch klas:- Klasę
StorageIterator<T>, która implementujeIterator<T>, aby umożliwić iterowanie po przechowywanych elementach - Klasę
Storage<T>, która rozszerzaIterable<T>i ma następujące możliwości:- Prywatną listę do wewnętrznego przechowywania elementów
- Metodę
add(T item)do przechowywania nowego elementu - Metodę
getAt(int index), która zwraca element o podanym indeksie - Getter
count, który zwraca liczbę przechowywanych elementów - Getter
iterator, który zwraca obiektStorageIteratordla przechowywanych elementów
- Klasę
main.dart: Zaimportuj plik z systemem przechowywania i pokaż jego działanie z różnymi typami:- Utwórz obiekt
Storage<String>i dodaj trzy nazwy miast:'Paris','Tokyo','Sydney' - Wypisz liczbę elementów
- Wypisz element o indeksie 1
- Użyj pętli
for-in, aby wypisać każde miasto w osobnym wierszu - Wypisz pusty wiersz
- Utwórz obiekt
Storage<int>i dodaj cztery liczby:100,200,300,400 - Użyj metody
where, aby odfiltrować wartości większe niż 150, a następnie wypisz wynikową listę
- Utwórz obiekt
Twój system przechowywania powinien działać bezproblemowo z dowolnym typem, zachowując pełne bezpieczeństwo typów. Ponieważ rozszerza Iterable, automatycznie zyskuje dostęp do zaawansowanych metod, takich jak where, map i fold!
Oczekiwany wynik:
Count: 3
Item at 1: Tokyo
Paris
Tokyo
Sydney
[200, 300, 400]Spróbuj swoich sił
import 'storage.dart';
void main() {
// TODO: Utwórz Storage<String> dla miast
// Dodaj trzy miasta: 'Paris', 'Tokyo', 'Sydney'
// TODO: Wypisz liczbę elementów (format: "Count: X")
// TODO: Wypisz element o indeksie 1 (format: "Item at 1: X")
// TODO: Użyj pętli for-in, aby wypisać każde miasto w osobnym wierszu
// TODO: Wypisz pusty wiersz
print('');
// TODO: Utwórz Storage<int> dla liczb
// Dodaj cztery liczby: 100, 200, 300, 400
// TODO: Użyj metody where, aby odfiltrować wartości większe niż 150
// Następnie wypisz wynikową listę, używając toList()
}
Wszystkie lekcje w sekcji Programowanie obiektowe
1Podstawy OOP
Pliki zewnętrzneBiblioteki i importyWprowadzenie do OOPKlasy a obiektySłowo kluczowe thisMetodyZmienne instancjiPodstawy konstruktorówPowtórka – prosty kalkulator4Bezpieczeństwo wartości null
Wprowadzenie do bezpieczeństwa wartości nullTypy dopuszczające null i niedopuszczające nullOperatory ? i !Słowo kluczowe late a bezpieczeństwo wartości nullOperatory uwzględniające nullBezpieczeństwo wartości null w klasachPodsumowanie — system profili użytkowników7Klasy abstrakcyjne i interfejsy
Klasy abstrakcyjneMetody abstrakcyjneInterfejsy w DartInterfejsy niejawneImplementowanie a rozszerzanieWiele interfejsówPowtórka — kalkulator kształtów10Kolekcje i typy generyczne
Przegląd List, Set i MapKolekcje bezpieczne typowoKlasy generyczneMetody generyczneOgraniczenia typów generycznychIterable i IteratorPowtórka — generyczne przechowywanie danych13Zaawansowane koncepcje OOP
Kompozycja a dziedziczenieMetody rozszerzająceKlasy wywoływalneKlasy zapieczętowane (Dart 3)Rekordy (Dart 3)Wzorce i dopasowywanie (3.0)Typy wyliczeniowe z metodami16Projekt: Zarządzanie biblioteką
Omówienie projektuKlasy książek i użytkowników2Konstruktory w Dart
Konstruktor domyślnyKonstruktory nazwaneListy inicjalizująceKonstruktory stałeKonstruktory fabryczneKonstruktory przekierowującePodsumowanie — budowanie kształtów5Hermetyzacja
Elementy publiczne a prywatneKonwencja prefiksu _Prywatność na poziomie bibliotekiGettery i settery — szczegółowoUkrywanie informacjiPodsumowanie — dane uczniów8Domieszki
Wprowadzenie do domieszekTworzenie domieszekKorzystanie z wielu domieszekSłowo kluczowe on w domieszkachDomieszka a dziedziczenieDomieszka a interfejsPodsumowanie – system zwierząt11Metody specjalne
Nadpisanie toString()Nadpisanie hashCode i ==Interfejs ComparableMetoda call()Nadpisanie noSuchMethodPodsumowanie — własna kolekcja14Wzorce projektowe, część 1
Wprowadzenie do wzorców projektowychWzorzec SingletonWzorzec FactoryWzorzec ObserverWzorzec Strategy3Właściwości klas
Elementy instancji a elementy statycznePola final i constZmienne inicjalizowane z opóźnieniemMetody i pola statyczneGettery i setteryPowtórzenie – menedżer kont bankowych6Dziedziczenie
Podstawy dziedziczeniaSłowo kluczowe superPrzesłanianie metodAdnotacja @overrideSłowo kluczowe final dla klasKonstruktory i dziedziczeniePowtórzenie – hierarchia pracowników9Polimorfizm
Podstawy polimorfizmuPolimorfizm za pomocą interfejsówSprawdzanie typu w czasie działaniaOperatory is i asSłowo kluczowe covariantPodsumowanie — procesor płatnościPoćwicz samodzielnie: Kompilator Dart online