Powtórka – prosty kalkulator
Część sekcji Programowanie obiektowe ścieżki Dart w Coddy. Lekcja 9 z 110.
Wyzwanie
ŚredniZbuduj kompletną klasę Calculator w pliku calculator.dart, która łączy wszystko, czego się nauczyłeś. Plik driver.dart zaimportuje i przetestuje Twoją klasę.
Twoja klasa Calculator musi demonstrować wszystkie zagadnienia omówione w tym module:
- Pliki zewnętrzne:
calculator.dartzostanie zaimportowany przezdriver.dartza pomocąimport 'calculator.dart'; - Biblioteki i importy:
driver.dartużywaimport 'dart:io'; - Wprowadzenie do OOP: Zdefiniuj
class Calculatori twórz obiekty za pomocąCalculator() - Klasy a obiekty: Każdy test tworzy nowy obiekt
Calculatorz własnym, niezależnym stanem - Słowo kluczowe this: Użyj
this.resultwe wszystkich metodach, aby uzyskać dostęp do zmiennej instancji - Metody: Zaimplementuj
add,subtract,multiply,divide,clearigetResult - Zmienne instancji: Zadeklaruj
int result = 0jako zmienną instancji - Podstawy konstruktorów: Dodaj konstruktor
Calculator(), który ustawiaresultna0i wyświetla'Calculator ready'
Wymagania dotyczące metod:
int add(int number): dodajenumberdoresulti zwraca nowy wynikint subtract(int number): odejmujenumberodresulti zwraca nowy wynikint multiply(int number): mnożyresultprzeznumberi zwraca nowy wynikint divide(int number): dzieliresultprzeznumberza pomocą dzielenia całkowitoliczbowego (~/=) i zwraca nowy wynik. Jeślinumberwynosi0, wyświetl dokładnie'Error: Division by zero'i zwróć niezmieniony wynikvoid clear(): resetujeresultdo0int getResult(): zwraca bieżącyresult
Przykładowe użycie:
Calculator calc = Calculator(); // prints: Calculator ready
calc.add(10); // result = 10
calc.multiply(3); // result = 30
calc.subtract(5); // result = 25
calc.divide(5); // result = 5
calc.divide(0); // prints: Error: Division by zero
calc.clear(); // result = 0Spróbuj swoich sił
import 'calculator.dart';
import 'dart:io';
void main() {
String testCase = stdin.readLineSync()!;
if (testCase == 'constructor_test') {
Calculator calc = Calculator();
print('Initial result: ${calc.getResult()}');
print('Calculator created successfully');
} else if (testCase == 'addition_test') {
Calculator calc = Calculator();
int r1 = calc.add(10);
print('After adding 10: $r1');
int r2 = calc.add(5);
print('After adding 5: $r2');
print('Final result: ${calc.getResult()}');
} else if (testCase == 'subtraction_test') {
Calculator calc = Calculator();
calc.add(20);
int r1 = calc.subtract(8);
print('After subtracting 8 from 20: $r1');
int r2 = calc.subtract(2);
print('After subtracting 2: $r2');
print('Final result: ${calc.getResult()}');
} else if (testCase == 'multiplication_test') {
Calculator calc = Calculator();
calc.add(5);
int r1 = calc.multiply(4);
print('After multiplying by 4: $r1');
int r2 = calc.multiply(2);
print('After multiplying by 2: $r2');
print('Final result: ${calc.getResult()}');
} else if (testCase == 'division_test') {
Calculator calc = Calculator();
calc.add(100);
int r1 = calc.divide(4);
print('After dividing by 4: $r1');
int r2 = calc.divide(5);
print('After dividing by 5: $r2');
print('Final result: ${calc.getResult()}');
} else if (testCase == 'division_by_zero_test') {
Calculator calc = Calculator();
calc.add(50);
print('Initial value: ${calc.getResult()}');
int r = calc.divide(0);
print('Result after division by zero: $r');
print('Value unchanged: ${calc.getResult()}');
} else if (testCase == 'clear_test') {
Calculator calc = Calculator();
calc.add(25);
calc.multiply(3);
print('Before clear: ${calc.getResult()}');
calc.clear();
print('After clear: ${calc.getResult()}');
print('Current result: ${calc.getResult()}');
} else if (testCase == 'comprehensive_test') {
Calculator calc = Calculator();
calc.add(10);
calc.multiply(3);
calc.subtract(5);
calc.divide(5);
print('After sequence of operations: ${calc.getResult()}');
calc.divide(0);
print('After division by zero attempt: ${calc.getResult()}');
calc.clear();
calc.add(100);
print('After clear and add 100: ${calc.getResult()}');
} else {
print('Unknown test case');
}
}
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