编程语言和面向对象浅谈

  • Post author:
  • Post category:其他


编程语言和面向对象浅谈

编程语言是一种计算机语言,用于编写计算机程序或脚本的一种形式化语言,用于指示计算机执行特定的任务或操作。编程语言的种类很多,包括高级语言(如Java、Python、C++、JavaScript)和低级语言(如汇编语言)。编程语言可以用于开发各种类型的计算机应用程序,包括网站、桌面应用程序、移动应用程序、操作系统、游戏等。

编程范式法(Programming paradigm),是指软件工程中的一类典型的编程风格(或者说是编程方式)。常见的编程范型有:函数式编程、指令式编程、过程式编程、面向对象编程等等。一些语言是专门为某个特定的范型设计的,如 Smalltalk 和 Java 支持面向对象编程,而 Haskell 和 Scheme 则支持函数式编程,同时还有另一些语言支持多种范型,如C++、Python、Rust。

编程范型和编程语言之间的关系可能十分复杂,由于一个编程语言可以支持多种范型。例如,C++ 设计时,支持过程式编程、面向对象编程。一程序员可以用 C++ 写出一个完全过程化的程序,另一个人也可以用 C++ 写出一个纯粹的面向对象程序,甚至还有人可以写出杂揉了两种范型的程序。


过程式编程

:面向过程的思想是把一个项目、一件事情按照一定的顺序,从头到尾一步一步地做下去,先做什么,后做什么,一直到结束。这种思想最好理解,和我们日常做事情的方法一致。

意思就是在编写代码的时候,要解决的问题被看作是一个个要完成的任务,之所以又叫结构化设计语言是因为,它主要是采用自顶向下、逐步求精的程序设计方法,使用三种基本控制结构:顺序、选择、循环。

程序流程图是过程化语言进行程序编写的有效辅助手段。

过程化语言特别适合解决线性(或者说按部就班)的算法问题。它强调“自上而下(自顶向下)” “精益求精”的设计方式。这种方式非常类似我们的工作和生活方式,因为我们的日常活动都是按部就班的顺序进行的。


面向对象编程

“面向对象”的英文名为“objective oriented”意思是,“以客体为导向”。

面向对象编程/面向对象程序设计(Object-oriented programming OOP)是种通过类、方法、对象和消息传递,来支持面向对象的程序设计范式。对象则指的是类的实例。在面向对象程序编程里,程序会被设计成彼此相关的对象,将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性、灵活性和扩展性。

当我们提到面向对象的时候,它不仅指一种程序设计方法。它更多意义上是一种程序开发方式。在这一方面,我们必须了解更多关于面向对象系统分析和面向对象设计(Object Oriented Design,简称OOD)方面的知识。

对于OOP的准确定义及其本意存在着不少争论。通常,OOP被理解为一种将程序分解为封装(Encapsulation)数据及相关操作的模块而进行的编程方式。支持面向对象编程语言通常利用继承(inheritance)其他类实现代码重用和可扩展性的特性。

类有两个主要的概念:




(Class):定义了一件事物的抽象特点。类的定义包含了数据的形式以及对数据的操作。在程序中,类(Class)实际上就是数据类型(type),描述了一组有相同特征/状态(数据成员)和相同行为(方法——成员函数)的对象。


对象(

Object):是类的实例(Instance)。与通常所认为的经典面向对象程序设计Java不同,在有些语言如python,一切都是对象,类也是对象,即对象指类和它们的实例这两者。

https://www.cnblogs.com/traditional/p/13391098.html

面向对象的封装、继承、多态,使软件大规模化成为可能,它实践了软件工程的三个目标:可维护性、可重用性、可扩展性。对于小规模程序来说,面向对象确实意义不大。


封装

(Encapsulation)封装包含两个含义。第一个是在面向对象编程中对象将变量(状态)和 方法(用来改变状态或执行涉及状态的计算)集中在类(或对象)中。第二个指的是隐藏类的内部数据,以避免客户端代码(即类外部的代码)直接进行访问。例如,将对应的行为抽取为方法,状态数据抽取为属性,创建良好的类。

封装可以尽可能地隐藏内部的细节,只保留一些对外接口(interface)使之与外部发生联系,可以使我们容易地修改类的内部实现,而无需修改使用了该类的代码。

【注:接口(interface)有多种含义

1.在编程中,将类对外暴露的公共方法和属性等成员称为接口(interface),目的是使其能被内部修改而不影响外界其他实体与其交互沟通的方式;

2.在编程中,只包含方法声明但没有具体实现的接口,需要使用关键字”interface”来定义;

3.计算机网络中,用于描述不同系统之间的连接点或共享的边界,例如网络接口、API接口等。】

对象能够接受什么请求,是由它的“接口”决定的,而对象所归属的类定义了这些接口。

如何能让一个对象真正发挥其作用呢?答案是向对象发送请求。向对象发送消息,可以用一个英文句号(.)将对象名和请求(即方法)连接起来。

封装,简单地说就是把一系列的逻辑写在一个类里,对外只暴露必要的[成员]变量和方法。


继承

(Inheritance)是指,在某种情况下,一个类会有“子类”。子类比原本的类(称为父类)要更加具体化。继承最大好处就是“代码重用”。继承就是子类拥有父类所有的变量和方法,子类继承父类,意思是把父类的成员(变量和方法)拿来直接使用,减少代码的重复开发,达到复用。

继承,简单地说是使用已存在的类(父类)作为基础建立新类的技术,新类(子类)的定义可以增加新的数据或新的功能,也可以用父类的功能。实际上继承者(子类)是被继承者(父类)的特殊化,它除了拥有被继承者的成员(变量和方法)外,还拥有自己独有的成员(变量和方法)。


多态

(Polymorphism)是指由继承而产生的相关的不同的类,其对象对同一消息会做出不同的响应。多态不太好理解,多态的形式多样,实现方式多样【

https://zhuanlan.zhihu.com/p/533706615

】,其中一种是多个方法使用同一个名字:一个父类的多个子类可以为同一个函数提供不同的实现,表现出多种行为——子类重写父类的方法。下面给出一个简单Java语言例子,演示了同名方法产生不同效果的目的:

public class demoPolymorphism {
    public static void main(String[] args) {
        People p=new student();
        p.eat();  //调用eat(),输出"吃水煮肉片"
       
        People s=new teacher();
        s.eat();  //调用eat(),输出"吃樱桃"
        
    }
}
class People{
    public void eat(){
        System.out.println("吃饭");
    }
}
class student extends People{
    @Override
    public void eat(){
        System.out.println("吃水煮肉片");
    }
 
}
class teacher extends People{
    @Override
    public void eat(){
        System.out.println("吃樱桃");
    }
 }

特别提示,请不要纠结此例简单到没什用处,应从了解多态的意图角度着想,


方便扩展


,如若想添加学校管理行政人员(staff),可以添加一个子类class staff extends People,而无需修改原来的类,这对大的项目还是很有意义的。

编程语言是描述程序的方法,每种具体语言都有其特点,不同的编程语言提供的具体实现机制和描述术语不太一样,如Java、C++、Java Script、python面向对象程序设计不太一样,学一门编程语言就不得不去研究一些例子,通过例子来揣摩各种术语真正的含义。

下面是我写的几种常见语言面向对象博文:

程序设计中的基本概念

https://blog.csdn.net/cnds123/article/details/108810035

C++面向对象程序设计

https://blog.csdn.net/cnds123/article/details/109141006

Java面向对象

https://blog.csdn.net/cnds123/article/details/110915227

Python面向对象程序设计

https://blog.csdn.net/cnds123/article/details/108354860

JavaScript面向对象编程

https://blog.csdn.net/cnds123/article/details/129982056

面向对象编程三大特征介绍

https://blog.csdn.net/cnds123/article/details/131931698


附录

JavaScript面向对象编程

https://cloud.tencent.com/developer/article/1830453

怎么理解面向对象?

https://www.zhihu.com/question/313687376


​​

OOP编程思想

https://zhuanlan.zhihu.com/p/88176396

怎样解决编程语言之间的差异性问题?

https://blog.csdn.net/qq_34079398/article/details/81560918

什么是面向对象,它的三个基本特征:封装、继承、多态

https://blog.csdn.net/weixin_51201930/article/details/122652397

面向对象的三大特征

https://blog.51cto.com/u_15127604/3316782



版权声明:本文为cnds123原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。