public class User {
private int age;
public int getAge() {
return age;
}
public void setAge(int age) {
if (age < 18) {
System.out.println("错误!最小年龄应为18岁!");
this.age = 18; // 如果不符合年龄要求,则赋予默认值
}
else{
this.age = age;
}
}
public String toString() {
return " [age=" + age + "]";
}
}
public class TestUser {
public static void main(String[] args) {
User p1 = new User();
p1.setAge(20); //通过seter、geter、toString来对Adult类的私有属性访问
System.out.println(p1.toString()); //增加了数据访问限制,保证可维护性
}
}
class User():
"""创建用户个人信息"""
def __init__(self, first_name, last_name, phone_number = '', email = '', **user_info):
# 在这其中我们加入了题目所要求的两种属性,而且还有一般网站都会要求的电话号码与邮箱,我们最后加入了一个字典,可以让用户个性化的定制自己的资料
self.name = first_name +" " + last_name
self.phonenumber = phone_number
self.email = email
self.other = user_info # 新建一个字典来接收user_info字典
def describe_user(self): #打印用户信息摘要的方法
print("This user‘ name is " + self.name)
print("This user's phone number is " + self.phonenumber)
print("This user's email is " + self.email)
print("There are any other imformations below:")
print(self.other)
def greet_user(self): #向用户发送我们的问候
print("Hello, " + self.name)
AE = User('Albert','Einstein', '123456789', '88888888@qq.com', Major = 'Computer', job = 'physicist' )
AE.describe_user()
AE.greet_user()
<script type="text/javascript">
//新建英雄:刘备
var hero=new Object();
hero.name='刘备';
hero.blood=100;
hero.weapon='双股剑';
hero.attack=function(){
return this.name+'使用'+this.weapon+'发起了攻击';
};
alert(hero.attack());
var hero2=new Object();
hero2.name='关羽';
hero2.blood=100;
hero2.weapon='青龙偃月刀';
hero2.attack=function(){
return this.name+'使用'+this.weapon+'发起了攻击';
};
alert(hero2.attack());
</script>
#include <iostream>
using namespace std;
class Box
{
public:
double length; // 长度
double breadth; // 宽度
double height; // 高度
};
int main( )
{
Box Box1; // 声明 Box1,类型为 Box
Box Box2; // 声明 Box2,类型为 Box
double volume = 0.0; // 用于存储体积
// box 1 详述
Box1.height = 5.0;
Box1.length = 6.0;
Box1.breadth = 7.0;
// box 2 详述
Box2.height = 10.0;
Box2.length = 12.0;
Box2.breadth = 13.0;
// box 1 的体积
volume = Box1.height * Box1.length * Box1.breadth;
cout << "Box1 的体积:" << volume <<endl;
// box 2 的体积
volume = Box2.height * Box2.length * Box2.breadth;
cout << "Box2 的体积:" << volume <<endl;
return 0;
}
但是你思考过为什么
面向对象技术
是软件工程领域
中的重要技术,面向对象技术是一种对真实世界
的抽象思维方式。 如“一、代码说事”
中的这些代码一样,无论是描述人类,还是一个物体的大小。 这些所抽象的属性,都是真实存在的,例如人
,就可以抽象出来名字、身高、年龄等; 例如一个物体,就可以抽象出,它的长、宽、高、颜色等。 这种技术比较自然地模拟了人类认识客观世界的方式;
面向对象方法的基本思想:
面向对象方法的基本思想是从现实世界中客观存在的事物(即对象)出发,尽可能地运用人类的自然思维方式来构造软件系统。它更加强调运用人类在日常逻辑思维中经常采用的思想方法与原则,例如:
抽象
、分类
、聚合
、封装
等,使开发者以现实世界中的事物为中心来思考和认识问题,并以人们易于理解的方式表达出来。
软件工程学家Codd
和Yourdon
发话了,他们说:
面向对象
=对象
+类
+继承
+通信
如果一个软件系统,采用这些概念来建立模型并实现的话,那么它就是面向对象的。
面向对象的概念看似简单,但是要做到真正理解和掌握还是需要花费时间的,而且需要在软件开发的实践中进行体验。
为了方便理解,和看,我费劲了九牛二虎之力,最终画出了如下成果的图,最终目的就是可以让你看的更清楚,更好,更容易记忆。 图中包括对
对象
、类
、封装
、继承
、消息
、关联
、聚合
、多态性
进行了总结。
下面这张图,就了解到这些知识点:
对象(Object)
是系统中描述客观事物的一个实体,它是构成系统的一个基本单位,由一组属性和对这组属性进行操作的一组服务组成。 属性:用来描述对象静态特征的一个数据项服务:用来描述对象动态特征(行为)的一个操作序
类(Class):
具有相同属性和服务的一组对象的集合,它为属于该类的全部对象提供了统一的抽象描述,其内部包括属性和服务两个主要部分。类代表一个抽象的概念或事物,对象是在客观世界中实际存在的类的实例。
类与对象的比较
“同类对象具有相同的属性和服务”是指它们的定义形式相同,而不是说每个对象的属性值都相同。
类是静态的
,类的存在、语义和关系在程序执行前就已经定义好了。
对象是动态的
,对象在程序执行时可以被创建和删除。
在面向对象的系统分析和设计中,并不需要逐个对对象进行说明,而是着重描述代表一批对象共性的类。
消息(Message):对象发出的服务请求,一般包含提供服务的对象标识、服务标识、输入信息和应答信息等信息。
说明
一个对象向另一个对象发出消息请求某项服务,接收消息的对象响应该消息,激发所要求的服务操作,并将操作结果返回给请求服务的对象。
封装(Encapsulation)
:把对象的属性和服务结合成一个独立的系统单位,并尽可能隐藏对象的内部细节。
封装的作用
使对象形成两个部分:接口(可见)和实现(不可见)信息隐藏将所声明的功能(行为)与内部实现(细节)分离封装可以保护对象,避免用户误用; 也可以保护客户端,其实现过程的改变不会影响到相应客户端的改变。可见性是指对象的属性和服务允许对象外部存取和引用的程度。
继承(Inheritance)
:指子类可以自动拥有父类的全部属性和服务
继承的作用
简化了人们对现实世界的认识和描述对于软件复用是十分有益的
继承的类型
单继承
:子类只从一个父类继承多继承
:子类从多个父类继承
多态性(Polymorphism)
:指在父类中定义的属性或服务被子类继承后,可以具有不同的数据类型或表现出不同的行为
起到的作用:
多态性机制为软件的结构设计勾勒灵活性,减少了信息冗余,明显提高了软件的可复用性和可扩展性
分类结构表示的是事物的一般与特殊的关系,在面向对象术语中,将一般与特殊的关系称为泛化(Generalization)联系。
如果在分类结构中存在多继承,将形成一个类的网格结构
组成结构表示对象类之间的组成关系,即部分与整体关系。
组成结构体现了面向对象方法的聚合(Aggregation)原则。组成结构可以表示出复杂的对象层次结构。
实例连接表示对象之间的静态联系,它是通过对象的属性来表现对象之间的依赖关系。
在面向对象术语中,对象之间的实例连接称为链接(Link),存在实例连接的对象类之间的联系称为关联(Association)。
消息连接是对象之间的通信联系,它表现了对象行为的动态联系。
一个对象需要另一个对象的服务,便向它发出请求服务的消息,接收消息的对象响应消息,触发所要求的服务操作。
消息连接是在具有交互的对象之间的一种基本联系。如果两个对象之间不存在交互行为,自然没有消息连接。
你可能经常看到什么OOP、OOA、OOD之类的。
1、面向对象分析(Object Oriented Analysis,OOA)
分析和理解问题域,找出描述问题域和系统责任所需的类及对象,分析它们的内部构成和外部关系,建立OOA 模型。
2、面向对象设计(Object Oriented Design,OOD)
将OOA 模型直接变成OOD 模型,并且补充与一些实现有关的部分,如人机界面、数据存储、任务管理等。
3、面向对象编程(Object Oriented Programming,OOP)
用一种面向对象的编程语言将OOD 模型中的各个成分编写成程序,由于从OOA→OOD→OOP实现了无缝连接和平滑过渡,因此提高了开发工作的效率和质量。
4、面向对象测试(Object Oriented Testing,OOT)
面向对象测试是指对于运用OO 技术开发的软件,在测试过程中继续运用OO 技术进行以对象概念为中心的软件测试。 以类作为基本测试单位,集中检查在类定义之内的属性、服务和有限的对外接口,大大减少了错误的影响范围。
5、面向对象软件维护(Object Oriented Software Maintenance,OOSM)
在面向对象方法中,各阶段采用的表示是一致的,从而大大降低了理解的难度,无论是从程序中的错误追溯到问题域,还是需求的变化都要从问题域追溯到程序,整个过程都是平坦的。 对象的封装性使得一个对象的修改对其他对象的影响很小,不至于牵一发而动全身。
参考资料:
https://blog.csdn.net/a449559862/article/details/79782154
https://www.cnblogs.com/cainiao-chuanqi/p/11592920.html
https://www.runoob.com/cplusplus/cpp-classes-objects.html
如果对你有帮助,可以分享给你身边的朋友。 水平有限,难免会有疏漏或者书写不合理的地方,欢迎交流讨论。 作者:
TrueDei
如果喜欢我的文章,还没看够可以关注我,我会用心写好每一篇文章。