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