feat: Finish part - 5
parent
342b442622
commit
6aed2c9014
@ -0,0 +1,136 @@
|
||||
import 'dart:math';
|
||||
|
||||
void basic_classes() {
|
||||
Square square = Square(10.0);
|
||||
Rectangle rectangle = Rectangle(20.0, 15.0);
|
||||
Circle circle = Circle(2.0);
|
||||
|
||||
print(square.name);
|
||||
print(rectangle.name);
|
||||
print(circle.name);
|
||||
}
|
||||
|
||||
abstract class Shape {
|
||||
double get perimeter;
|
||||
double get area;
|
||||
String get name;
|
||||
}
|
||||
|
||||
class Circle extends Shape {
|
||||
double radius;
|
||||
|
||||
Circle(this.radius);
|
||||
|
||||
@override
|
||||
double get area => pi * (radius * radius); // πr²
|
||||
|
||||
@override
|
||||
String get name => "I'm a circle with radius: $radius";
|
||||
|
||||
@override
|
||||
double get perimeter => 2 * pi; // 2πr
|
||||
|
||||
@override
|
||||
String toString() => "${this.runtimeType}($radius)";
|
||||
}
|
||||
|
||||
class Rectangle extends Shape {
|
||||
double length;
|
||||
double width;
|
||||
|
||||
Rectangle(this.length, this.width);
|
||||
|
||||
@override
|
||||
double get area => length * width;
|
||||
|
||||
@override
|
||||
String get name => "I'm a rectangle with length: $length, width: $width";
|
||||
|
||||
@override
|
||||
double get perimeter => 2 * (length + width);
|
||||
|
||||
@override
|
||||
String toString() => "${this.runtimeType}($length, $width)";
|
||||
}
|
||||
|
||||
class Square extends Rectangle {
|
||||
Square(double side) : super(side, side);
|
||||
|
||||
@override
|
||||
String get name => "I'm a square with side: $length";
|
||||
}
|
||||
|
||||
|
||||
void basic_interfaces_and_mixins() {
|
||||
SmartPhone myPhone = SmartPhone("123-456-789");
|
||||
SmartTablet myPad = SmartTablet("111-222-333");
|
||||
|
||||
try {
|
||||
myPhone.pickUp();
|
||||
myPhone.dial("789-456-123");
|
||||
myPad.pickUp();
|
||||
myPad.dial("789-456-123");
|
||||
} catch (e) {
|
||||
print(e);
|
||||
}
|
||||
|
||||
print(myPhone.nowTime);
|
||||
myPhone.setAlarm(myPhone.nowTime.add(Duration(minutes: 20)));
|
||||
}
|
||||
|
||||
mixin ClockMixin {
|
||||
DateTime nowTime = DateTime.now();
|
||||
|
||||
void setAlarm(DateTime alarmTime) {
|
||||
print("Set an alarm at $alarmTime");
|
||||
}
|
||||
}
|
||||
|
||||
/// Interface Phone
|
||||
abstract class Phone {
|
||||
String get phoneNumber;
|
||||
|
||||
void dial(String number) {}
|
||||
|
||||
void pickUp() {}
|
||||
}
|
||||
|
||||
class SmartPhone with ClockMixin implements Phone {
|
||||
String _phoneNumber;
|
||||
|
||||
SmartPhone(String phoneNumber) : this._phoneNumber = phoneNumber;
|
||||
|
||||
@override
|
||||
void dial(String number) {
|
||||
print("SmartPhone($phoneNumber) dials $number");
|
||||
}
|
||||
|
||||
@override
|
||||
String get phoneNumber => _phoneNumber;
|
||||
|
||||
@override
|
||||
void pickUp() {
|
||||
print("Pick up SmartPhone($phoneNumber)");
|
||||
}
|
||||
}
|
||||
|
||||
class SmartTablet with ClockMixin implements Phone {
|
||||
String _phoneNumber;
|
||||
|
||||
SmartTablet(String phoneNumber) : this._phoneNumber = phoneNumber;
|
||||
|
||||
@override
|
||||
void dial(String number) {
|
||||
throw UnimplementedError("SmartTablet can't dial");
|
||||
}
|
||||
|
||||
@override
|
||||
String get phoneNumber => _phoneNumber;
|
||||
|
||||
@override
|
||||
void pickUp() {
|
||||
print("Pick up SmartTablet($phoneNumber)");
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue