乐趣区

关于oop:扒一扒面向对象编程的另一面

摘要: 只管有很多小伙伴对面向对象的概念曾经很很熟了,然而到底什么是面向对象编程?面向对象有哪些个性?面向对象编程可能为咱们带来哪些便当?面向对象又有哪些有余呢?

本文分享自华为云社区《【云驻共创】被吹捧了很多年的面向对象编程真的就这么完满吗?》,作者:冰 河。

说到面向对象,置信很多小伙伴都曾经很相熟了,毕竟像 Java、C++ 这种编程语言长期排在编程语言榜的前列,而且简直每一所大学的软件工程业余和计算机专业都会开设 Java 和 C ++ 相干的课程。在上学时,老师就会给咱们将什么是对象、什么类。比方:在 Java 中,万物皆对象。

说到这儿,只管有很多小伙伴对面向对象的概念曾经很很熟了,然而到底什么是面向对象编程?面向对象有哪些个性?面向对象编程可能为咱们带来哪些便当?面向对象又有哪些有余呢?

很少有人深究过这些问题,置信不少小伙伴都是都是只知其一; 不知其二的,明天,咱们就一起来聊聊面向对象这个话题。

什么是面向对象编程?

首先,咱们来聊聊什么是面向对象编程。面向对象编程的英文是 Object Oriented Programming,简称 OOP。在面向对象中有两个最重要,也是最根本的概念,那就是:类和对象。

这两个概念最早呈现到 Simula 编程语言中。而真正第一次应用面向对象编程这个概念的是在 Smalltalk 语言中。而 Smalltalk 语言也被公认为是世界上第一个真正意义上的面向对象编程语言。

倒退到明天,面向对象的编程语言越来越多,像 C ++、Java、Go、Python、C#、Object-C、Scala 等都是面向对象编程语言。

其实,面向对象编程和面向对象编程语言是有着实质的区别的。

面向对象编程: 面向对象编程更多的是指一种编程束缚,以类和对象这两个概念作为输入的载体,并提供 封装、继承、形象、多态 四个个性。

面向对象编程语言: 面向对象编程语言实质上就是一种输入表白面向对象的工具,它可能将程序员的所思所想转换成计算机可能辨认的二进制码,最终可能在计算机上运行。

面向对象有哪些个性?

后面咱们曾经简略的提及了面向对象的四大个性:封装、继承、形象和多态。

封装

封装,顾名思义,就是将要拜访的数据保护起来,不让外界间接拜访类的属性和字段,而是对外提供无限的拜访接口,受权内部仅能通过类提供的接口进行拜访。例如,咱们以 Java 语言为例,写一个只蕴含用户姓名 userName 和用户年龄 userSex 的 User 类。

public class User{
    private String userName;
    private Integer userSex;
 
    public void setUserName(String userName){this.userName = userName;}
 
    public String getUserName(){return this.userName;}
 
    public void setUserSex(Integer userSex){this.userSex = userSex;}
 
    public Integer getUserSex(){return this.userSex;}
}

在这个 User 类中,总共有两个属性,也叫做类的成员变量,别离为 userName 和 userSex。userName 示意用户的姓名,userSex 示意用户的名称。

咱们无奈间接拜访 User 类中的 userName 和 userSex 属性,因为它们都是被 privaite 修饰符润饰的。然而咱们能够通过如下四个办法访问者两个属性。

• void setUserName(String userName)
• String getUserName()
• setUserSex(Integer userSex)
• Integer getUserSex()

这种封装个性可能进步类的易用性,缩小编程过程中代码出错的危险。

继承

继承在编程语言里最间接的体现就是父子类的关系,在 Java 中应用 extends 关键字实现继承,而在 C ++ 中应用冒号(:)示意继承关系。

例如,咱们以 Java 语言为例,创立一个 Student 类,继承 User 类,如下所示。

public class Student extends User{
    private String studentNo;
 
    public void setStudentNo(String studentNo){this.studentNo = studentNo;}
 
    public String getStudentNo{return this.studentNo;}
}

此时,Student 类对象就可能通过 User 类对象提供的 public 办法拜访 User 类对象的属性。

继承最大的益处就是可能实现代码的复用。

形象

形象次要指的是暗藏办法的具体实现,让办法的调用者无需关怀办法的具体实现,只须要关怀类提供了哪些性能即可。

例如,在 Java 编程语言中,实现形象最直观的就是 接口和抽象类 。接口应用 interface 关键字润饰,抽象类应用 abstract 关键字润饰。

例如,以 Java 语言为例,Student 类的业务逻辑接口 StudentService 如下所示。

public interface StudentService{public abstract Student getStudentByNO(String studentNo);
}

实现 StudentService 接口的 AbstractStudent 抽象类。

public abstract class AbstractStudent{
 
    @Override
    public Student getStudentByNO(String studentNo){
        // 省略有数代码
        return student;
    } 
 
    public abstract void visitStudent(String studentNo);
}

形象更多的是可能让程序的设计和实现拆散。

多态

多态指的是子类能够替换父类,理论运行程序的代码时,调用子类的办法实现。例如,上面的 User 类和 Student 类。

User 类:

public class User{
    private String userName;
    private Integer userSex;
 
    public void setUserName(String userName){System.out.println("调用 User 类的 setUserName() 办法...");
        this.userName = userName;
    }
 
    public String getUserName(){return this.userName;}
 
    public void setUserSex(Integer userSex){this.userSex = userSex;}
 
    public Integer getUserSex(){return this.userSex;}
}

Student 类:

public class Student extends User{
    private String studentNo;
 
    public void setUserName(String userName){System.out.println("调用 Student 类的 setUserName() 办法...");
        this.userName = userName;
    }
 
    public void setStudentNo(String studentNo){this.studentNo = studentNo;}
 
    public String getStudentNo{return this.studentNo;}
}

咱们运行如下代码。

public static void main(String[] args){User user = new Student();
    user.setUserName("冰河");
}

此时,会在命令行输入如下语句:

调用 Student 类的 setUserName() 办法...
多态最大的益处就是进步了程序的可扩展性。

面向对象编程有哪些益处?

面向对象编程是有诸多益处的,例如文章后面介绍的如下长处:

• 封装个性可能进步类的易用性,缩小编程过程中代码出错的危险。
• 继承最大的益处就是可能实现代码的复用。
• 形象更多的是可能让程序的设计和实现拆散。
• 多态最大的益处就是进步了程序的可扩展性。

除此之外,面向对象编程在并发畛域也是由显著的劣势的。在并发编程畛域,咱们能够应用面向对象的封装个性将共享变量封装到一个类中,并且这个共享变量应用 private 润饰,也就是说这个共享变量无奈被外界间接拜访。它只能通过这个类提供的无限个办法进行拜访,并且这些办法都通过加锁的形式保障线程平安。这就防止了多个线程同时办法这个共享变量引起的线程平安问题。

面向对象编程有哪些有余?

只管面向对象编程存在着诸多的益处,然而它也有美中不足的局部。

• 万物皆对象,大量的创建对象会占用大量的内存空间。
• 须要有肯定的软件反对环境。
• 不太实用于开发一些计算机底层的利用,例如芯片开发,单片机开发等。
• 不太实用于一些大型的 MIS 零碎的开发。
• 性能不如面向过程编程高。
• 不适宜开发实时性要求特地高的指令传输零碎。

点击关注,第一工夫理解华为云陈腐技术~

退出移动版