什么是面向对象编程?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了什么是面向对象编程?相关的知识,希望对你有一定的参考价值。

一.前言



其实不管是java还是.net都是属于面向对象程序设计语言,归根结底,它们都离不开面向对象,所以什么是面向对象呢,意思就是object-oriented将对数据和对数据的操作作为一个相互依赖的关系、不可分割的整体,才用信息隐蔽技术和数据抽象,更简单地解决现实当中的问题!


上面的概念比较抽象,这里涉及到一个类的问题,通俗地说,就是把一个事物抽象出来成为类,而这个类的实例就是对象,类跟对象的关系其实就相当于设计图纸跟实物之间的关系,面向对象其实就是面向于类的!


面向对象的三大特性:封装、继承、多态!


二.基本概念


1.封装


封装的意思其实很简单:就像你使用优盘一样,优盘被封装在一个盒子里面,你根本不需要知道它是怎么工作的,你只要知道怎么用它就行了,当然用的时候是使用USB接口,对封装的类进行调用的时候也是用特定的接口进行调用的!


2.继承


继承是指一个对象从另一个对象中获得属性的过程.是面向对象程序设计的三大原则之二,它支持按层次分类的概念.例如,波斯猫是猫的一种,猫又是哺乳动物的一种,哺乳动物又是动物的一种.如果不使用层次的概念,每个对象需要明确定义各自的全部特征.通过层次分类方式,一个对象只需要在它的类中定义是它成为唯一的各个属性,然后从父类中继承它的通用属性.因此,正是由于继承机制,才使得一个对象可以成为一个通用类的一个特定实例.一个深度继承的子类将继承它在类层次中的每个祖先的所有属性.


继承与封装可以互相作用.如果一个给定的类封装了某些属性,它的任何子类将会含有同样得属性,另加各个子类所有得属性.这是面向对象程序在复杂性上呈线性而非几何增长的一个重要概念.新的子类继承其所有祖先的所有属性.子类和系统中的其他代码不会产生无法预料的交互作用.


3.多态


多态是指一个方法只能有一个名称,但可以有许多形态,也就是程序中可以定义多个同名的方法,用"一个接口,多个方法"来描述.可以通过方法的参数和类型引用.


三.封装、继承、多态之间的关系


下面我给你讲一个封装、继承、多态组合起来的例子:


在由封装,继承,多态所组成的环境中,程序员可以编写出比面向过程模型更健壮,更具扩展性的程序.经过仔细设计的类层次结构是重用代码的基础.封装能让程序员不必修改公有接口的代码即可实现程序的移植.多态能使程序员开发出简洁,易懂,易修改的代码.例如:汽车


从继承的角度看,驾驶员都依靠继承性来驾驶不同类型(子类)的汽车,无论这辆车是轿车还是卡车,是奔驰牌还是菲亚特牌,驾驶员都能找到方向盘,手刹,换档器.经过一段时间驾驶后,都能知道手动档与自动档之间的差别,因为他们实际上都知道这两者的共同超类:传动装置.


从封装的角度看,驾驶员总是看到封装好的特性.刹车隐藏了许多复杂性,其外观如此简单,用脚就能操作它.发动机,手刹,轮胎大小的实现对与刹车类的定义没有影响.


从多态的角度看,刹车系统有正锁反锁之分,驾驶员只用脚踩刹车停车,同样的接口可以用来控制若干种不同的实现(正锁或反锁)


这样各个独立的构件才被转换为汽车这个对象的.同样,电脑培训http://www.kmbdqn.cn/认为可以通过使用面向对象的设计原则,程序员可以把一个复杂程序的各个构件组合在一起,形成一个一致,健壮,可维护的程序。


参考技术A 面向对象程序设计是一种新的程序设计范型。这种范型的主要特征是: 程序=对象+消息
面向对象程序的基本元素是对象,面向对象程序的主要结构特点是:第一,程序一
般由类的定义和类使用两部分组成;第二,程序中的一切操作都是通过向对象发送消息来实现的,对象接收到消息后,启动有关方法完成相应的操作。
面向对象程序设计方法模拟人类习惯的解题方法,代表了计算机程序设计新颖的思维方式。这种方法的提出是对软件开发方法的一场革命,是目前解决软件开发面临困难的最有希望、最有前途的方法之一。

Python面向对象学习 1 (什么是面向对象,面向对象的应用场景)

程序设计的三种基本结构: 面向对象,面向过程,函数式编程
 
1,什么是面向对象编程 
 
面向对象编程是一种编程方式,此编程方式的落地需要使用 “类” 和 “对象” 来实现,所以,面向对象编程其实就是对 “类” 和 “对象” 的使用。
 
2,什么是类什么是对象,又有什么关系可以说类是一个函数的集合,看看下面的代码
class 类:#类名称
     def 函数1()
     pass
     def 函数2()
     pass
 
obj=类() #创建一个对象,实例化的过程
 
obj.函数1()#方法
 
3,什么时候适用面向对象呢?
 
当我们想写一个机器上传文件并执行命令的脚本,我们可以用面向过程的方法,利用函数写成这个样子:
def upload():
    #连接服务器
    #上传文件
    #关闭连接
    pass
def cmd():
    #连接服务器
    #执行命令
    #关闭连接
    pass
def upload_cmd():
    #连接服务器
    #上传文件
    #执行命令
    #关闭连接
    pass

也可以这样

def connect():
    #连接服务器
    pass
def close():
    #断开连接
    pass
def upload():
    connect()
    #上传文件
    close()
    pass
def cmd():
    connect()
   #执行命令
    close()
    pass
def upload_cmd():
    connect()
    upload()
    cmd()
    close()
    pass

感觉好像有点繁琐,总归是处理了,那么,如果用面向对象会如何呢?

class SSH(object):
    def __init__(self,host,port,pwd,username):
        self.host = host
        ...
    def connection(self):
        self.connection = 和服务器创建对象()        
    def  close(self):
        #关闭
        self.connection.关闭
    def upload(self):
        self.connection() 
        #使用连接上传文件
    def cmd(self):
        self.connection()
        #使用执行命令
        
obj = SSH(‘‘,host,port....)
obj.connection()
obj.upload()
obj.close()

我们把公共的功能,提取出来,还可以创建属于对象的属性,其他方法可以使用,这样不是更好么?

还有一种使用场景,就是类似于模板化,实例代码如下:

class Role(object):
    def __init__(self, name, role, weapon, life_value=100, money=15000):
        self.name = name
        self.role = role
        self.weapon = weapon
        self.life_value = life_value
        self.money = money

    def shot(self):
        print("%s shooting..." %self.name)
        self.__heart = "Die"
        print(self.__heart)

    def got_shot(self,):
        print("%s say : ah...,I got shot..." %self.name)

    def buy_gun(self, gun_name):
        print("%s just bought %s" %(self.name,gun_name))
        self.weapon = gun_name #通过类可以改对象的属性

r1 = Role(Alex, police, AK47) #生成一个角色
r2 = Role(Jack, terrorist, B22)  #生成一个角色

结论:

 面向对象不会写,也能实现和满足功能,就是比较麻烦,而面向对象简单的就能实现,但是无论我们用什么形式编程,我们都要明确记住一下原则:
 
1.写重复代码是非常不好的低级行为
2.你写的代码需要经常变更所以需要他可读性好,易扩展
3. 面向过程编程与OOP的主要区别就是 OOP 使程序更加容易扩展和易更改

下一篇文章会将面向对象的语法和特性总结:

Python面向对象学习2(面向对象的语法和特性)

 
 

以上是关于什么是面向对象编程?的主要内容,如果未能解决你的问题,请参考以下文章

当讨论面向对象的时候,我们到底谈论什么?

面向对象基础

面向对象编程简介

设计模式学习笔记 面向对象相比于面向过程的优势是什么?

Python面向对象学习 1 (什么是面向对象,面向对象的应用场景)

如何在C语言里实现“面向对象编程”