Skip to content

Commit 07056ff

Browse files
committed
update principles
1 parent 0333203 commit 07056ff

File tree

109 files changed

+3918
-410
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

109 files changed

+3918
-410
lines changed

README.md

Lines changed: 21 additions & 9 deletions

programming-paradigm/README.md

Lines changed: 22 additions & 0 deletions

oop/README.md renamed to programming-paradigm/oop/README.md

Lines changed: 7 additions & 7 deletions
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
/*
2+
抽象是一种简化复杂系统的方法,在更高层次上进行建模。抽象包括两个方面,一是过程抽象,二是数据抽象。
3+
抽象类:Shape是一个抽象类,它包含一个抽象方法calculateArea()。抽象类通过abstract关键字进行声明,不能被实例化。
4+
抽象类(Abstract Class)和接口(Interface)是不同的机制,用于实现多态性和代码组织。两者都可以用于定义抽象方法,但又有区别。
5+
抽象类用于表示一种"is-a"关系,而接口用于表示一种"can-do"关系。
6+
Go没有抽象类,可以使用interface替代。
7+
Go没有class,可以使用struct替代。
8+
*/
9+
package main
10+
11+
import (
12+
"fmt"
13+
"math"
14+
)
15+
16+
// 接口:形状
17+
type Shape interface {
18+
// 计算形状的面积
19+
calculateArea() float64
20+
}
21+
22+
// 结构体:圆形
23+
type Circle struct {
24+
radius float64 // 圆的半径
25+
}
26+
27+
// 实现接口方法:计算圆的面积
28+
func (c Circle) calculateArea() float64 {
29+
return math.Pi * c.radius * c.radius
30+
}
31+
32+
// 结构体:矩形
33+
type Rectangle struct {
34+
width float64 // 矩形的宽度
35+
height float64 // 矩形的高度
36+
}
37+
38+
// 实现接口方法:计算矩形的面积
39+
func (r Rectangle) calculateArea() float64 {
40+
return r.width * r.height
41+
}
42+
43+
// 结构体:三角形
44+
type Triangle struct {
45+
base float64 // 三角形的底边长
46+
height float64 // 三角形的高
47+
}
48+
49+
// 实现接口方法:计算三角形的面积
50+
func (t Triangle) calculateArea() float64 {
51+
return 0.5 * t.base * t.height
52+
}
53+
54+
func main() {
55+
// 创建圆形对象并计算面积
56+
circle := Circle{radius: 5}
57+
circleArea := circle.calculateArea()
58+
fmt.Println("圆形面积:", circleArea) // 输出:圆形面积: 78.53981633974483
59+
60+
// 创建矩形对象并计算面积
61+
rectangle := Rectangle{width: 4, height: 6}
62+
rectangleArea := rectangle.calculateArea()
63+
fmt.Println("矩形面积:", rectangleArea) // 输出:矩形面积: 24
64+
65+
// 创建三角形对象并计算面积
66+
triangle := Triangle{base: 3, height: 4}
67+
triangleArea := triangle.calculateArea()
68+
fmt.Println("三角形面积:", triangleArea) // 输出:三角形面积: 6
69+
}
70+
71+
/*
72+
jarry@jarrys-MacBook-Pro abstraction % go run AbstractionExample.go
73+
圆形面积: 78.53981633974483
74+
矩形面积: 24
75+
三角形面积: 6
76+
*/

oop/abstraction/AbstractionExample.java renamed to programming-paradigm/oop/abstraction/AbstractionExample.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,8 +76,8 @@ public static void main(String[] args) {
7676
double circleArea = circle.calculateArea();
7777
System.out.println("圆形面积: " + circleArea); // 输出:Circle Area: 78.53981633974483
7878

79-
// 创建矩形对象并计算面积
80-
Rectangle rectangle = new Rectangle(4, 6);
79+
// 创建矩形对象并计算面积,这里也可以使用抽象类声明
80+
Shape rectangle = new Rectangle(4, 6);
8181
double rectangleArea = rectangle.calculateArea();
8282
System.out.println("矩形面积: " + rectangleArea); // 输出:Rectangle Area: 24.0
8383

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
/*
2+
抽象是一种简化复杂系统的方法,在更高层次上进行建模。抽象包括两个方面,一是过程抽象,二是数据抽象。
3+
抽象类:Shape是一个抽象类,它包含一个抽象方法calculateArea()。抽象类通过abstract关键字进行声明,不能被实例化。
4+
抽象类(Abstract Class)和接口(Interface)是不同的机制,用于实现多态性和代码组织。两者都可以用于定义抽象方法,但又有区别。
5+
抽象类用于表示一种"is-a"关系,而接口用于表示一种"can-do"关系。
6+
JavaScript没有抽象类,声明对象也没有类型,使用了普通类和继承来模拟抽象类的概念。
7+
抽象类的作用和意义在于提供了一种抽象的、模板化的设计方式,通过定义抽象方法和具体实现,规范了子类的行为,普通类可以替代抽象类,但它们并不完全等价。
8+
*/
9+
10+
// 类:形状,可看作是抽象类
11+
class Shape {
12+
// 计算形状的面积,子类实现
13+
calculateArea() {
14+
throw new Error('Method "calculateArea" must be implemented');
15+
}
16+
}
17+
18+
// 子类:圆形
19+
class Circle extends Shape {
20+
constructor(radius) {
21+
super();
22+
this.radius = radius; // 圆的半径
23+
}
24+
25+
// 实现抽象方法:计算圆的面积
26+
calculateArea() {
27+
return Math.PI * this.radius ** 2;
28+
}
29+
}
30+
31+
// 子类:矩形
32+
class Rectangle extends Shape {
33+
constructor(width, height) {
34+
super();
35+
this.width = width; // 矩形的宽度
36+
this.height = height; // 矩形的高度
37+
}
38+
39+
// 实现抽象方法:计算矩形的面积
40+
calculateArea() {
41+
return this.width * this.height;
42+
}
43+
}
44+
45+
// 子类:三角形
46+
class Triangle extends Shape {
47+
constructor(base, height) {
48+
super();
49+
this.base = base; // 三角形的底边长
50+
this.height = height; // 三角形的高
51+
}
52+
53+
// 实现抽象方法:计算三角形的面积
54+
calculateArea() {
55+
return 0.5 * this.base * this.height;
56+
}
57+
}
58+
59+
// 测试验证
60+
// 创建圆形对象并计算面积
61+
const circle = new Circle(5);
62+
const circleArea = circle.calculateArea();
63+
console.log("圆形面积:", circleArea); // 输出:圆形面积: 78.53981633974483
64+
65+
// 创建矩形对象并计算面积
66+
const rectangle = new Rectangle(4, 6);
67+
const rectangleArea = rectangle.calculateArea();
68+
console.log("矩形面积:", rectangleArea); // 输出:矩形面积: 24
69+
70+
// 创建三角形对象并计算面积
71+
const triangle = new Triangle(3, 4);
72+
const triangleArea = triangle.calculateArea();
73+
console.log("三角形面积:", triangleArea); // 输出:三角形面积: 6
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
# -*- coding: utf-8 -*-
2+
'''
3+
抽象是一种简化复杂系统的方法,在更高层次上进行建模。抽象包括两个方面,一是过程抽象,二是数据抽象。
4+
抽象类:Shape是一个抽象类,它包含一个抽象方法calculateArea()。抽象类通过abstract关键字进行声明,不能被实例化。
5+
抽象类(Abstract Class)和接口(Interface)是不同的机制,用于实现多态性和代码组织。两者都可以用于定义抽象方法,但又有区别。
6+
抽象类用于表示一种"is-a"关系,而接口用于表示一种"can-do"关系。
7+
Python没有抽象类,但由于抽象方法。Python也无需父类声明子类。
8+
'''
9+
from abc import ABC, abstractmethod
10+
import math
11+
12+
# 抽象类:形状
13+
class Shape(ABC):
14+
# 抽象方法:计算形状的面积。由子类具体实现
15+
@abstractmethod
16+
def calculate_area(self):
17+
pass
18+
19+
# 子类:圆形
20+
class Circle(Shape):
21+
def __init__(self, radius):
22+
self.radius = radius # 圆的半径
23+
24+
# 实现抽象方法:计算圆的面积
25+
def calculate_area(self):
26+
return math.pi * self.radius ** 2
27+
28+
# 子类:矩形
29+
class Rectangle(Shape):
30+
def __init__(self, width, height):
31+
self.width = width # 矩形的宽度
32+
self.height = height # 矩形的高度
33+
34+
# 实现抽象方法:计算矩形的面积
35+
def calculate_area(self):
36+
return self.width * self.height
37+
38+
# 子类:三角形
39+
class Triangle(Shape):
40+
def __init__(self, base, height):
41+
self.base = base # 三角形的底边长
42+
self.height = height # 三角形的高
43+
44+
# 实现抽象方法:计算三角形的面积
45+
def calculate_area(self):
46+
return 0.5 * self.base * self.height
47+
48+
# 测试验证
49+
if __name__ == "__main__":
50+
# 创建圆形对象并计算面积
51+
circle = Circle(5)
52+
circle_area = circle.calculate_area()
53+
print("圆形面积:", circle_area) # 输出:圆形面积: 78.53981633974483
54+
55+
# 创建矩形对象并计算面积
56+
rectangle = Rectangle(4, 6)
57+
rectangle_area = rectangle.calculate_area()
58+
print("矩形面积:", rectangle_area) # 输出:矩形面积: 24
59+
60+
# 创建三角形对象并计算面积
61+
triangle = Triangle(3, 4)
62+
triangle_area = triangle.calculate_area()
63+
print("三角形面积:", triangle_area) # 输出:三角形面积: 6.0
64+
65+
'''
66+
jarry@jarrys-MacBook-Pro abstraction % python -V
67+
Python 3.8.2
68+
jarry@jarrys-MacBook-Pro abstraction % python AbstractionExample.py
69+
圆形面积: 78.53981633974483
70+
矩形面积: 24
71+
三角形面积: 6.0
72+
'''

0 commit comments

Comments
 (0)