首页 > 其他分享 >面向对象语言的全局认识

面向对象语言的全局认识

时间:2024-03-28 11:04:47浏览次数:27  
标签:语言 多态性 namespace 空间 面向对象 命名 using 全局

        学习一门语言,就像在一座陌生的城市旅游,第一步应该找一张这座城市的地图,对这座城市有个整体的了解,然后寻找自己的目的地,不至于迷失方向。

        一句话:先整体,再局部。

一.从面向过程到面向对象

   1.1 面向过程的困境

        当软件规模超过一定的尺度后,采用结构化程序设计,其开发和维护就越来越难控制。其根本的原因就在于面向过程的结构化程序设计的方法与现实世界(包括主观世界和客观世界)往往都不一致,结构化程序设计的思想往往很难贯彻到底。
        在结构化程序设计中,采用的是“自顶向下,逐步细化( divide and conquer , stepwise refinement)”的思想。具体操作方法是模块化,是按功能来分的,所以也称功能块。在 C语言中称为一个函数,一个函数解决一个问题,即实现一个功能或一个操作。
        在模块化的思想中已经出现了封装的概念,这个封装是把数据封装到模块中,即局部变量。但这是很不彻底的,因为模块是功能的抽象,而数据则是具有其个性的,一旦发生那怕是一点变化,抽象的功能模块就不再适用了。可维护性差成了制约结构化程序设计应用的瓶颈。

1.2 面向对象

        对象的概念是面向对象技术的核心所在。 面向对象技术中的对象就是现实世界中某个具体的物理实体在计算机逻辑中的映射和体现。

        正因为对象是对现实的模拟,所以可更好地解决现实问题。

        如下图所示。现实世界中的实体可以抽象出类别的概念。对应于计算机世界就有一个类(class)的概念,因为类是一个抽象的概念的对应体,所以计算机不给它分配内存,只给对象分配内存。

二.面向对象语言的四大特征

        面向对象语言的特征,可理解为类的特征。

2.1 抽象

        抽象是从众多的事物中抽取出共同的、本质性的特征,而舍弃其非本质的特征的过程。

        例如,对现实中的银行柜员进行抽象,映射到计算机,成为一个类;计算机将类实例化为对象,运行程序时,就模拟了现实的银行柜员。

        即是,类是对客观世界的抽象。

2.2 封装

        封装( Encapsulation)是面向对象程序设计最基本的特性,它把数据(属性)和函数(操作)合成一个整体。

        即是,类将“数据”和“函数”封装在一起。

2.3 继承

        继承( inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能。这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构。体现了由简单到复杂的认识过程。

        即是,类具有可重用性。

2.4 多态

        多态性( polymorphism)多态性是考虑在不同层次的类中,以及在同一类中, 同名的成员函数之间的关系问题。
( 1) 编译时的多态性
        函数的重载,运算符的重载,属于编译时的多态性。
( 2) 运行时的多态性
        以虚基类为基础的运行时的多态性是面向对象程序设计的标志性特征。 体现了类推和比喻的思想方法。

三.命名空间的引入

3.1 为什么引入

        命名空间是为了解决 C++中的变量、函数的命名冲突而引入的一种机制,其主要思路是将变量定义在一个不同名字的命名空间中。
        命名空间就像文件夹,它包含了若干个文件(类)。
        文件是把程序分块的物理方法,命名空间则是把程序分块的逻辑方法。
        注意: MFC 中并没有使用命名空间,但是在.NET 框架、 MC++和 C++/CLI 中,都大量使用了命名空间。

3.2 语法格式

        定义一个命名空间的语法如下:

namespace 命名空间名
{
    命名空间声明内容
}

3.3 命名空间成员的使用

3.3.1 有名空间

 3.3.1.1 声明单个成员

        using  namespace_name::name;

        例如:

using std::cin;
using std::string;
3.3.1.2 声明所有成员

        using  namespace_name;

        例如:

using namespace std;
3.3.1.3 直接引用

       语法格式为:

命名空间名::类/对象

         例如:

std::cout<<

3.3.2 无名空间

1.只能在当前编译单元中使用,在当前编译单元是全局的

        例如:

namespace
{
    int a;
    int func()
    {
        cout<<"hello"<<endl;
    }
};

2.嵌套在另一个命名空间内部。访问时,需使用外围的命名空间的名字来限定

#include<iostream>

using namespace std;

namespace space0
{
	namespace
	{
		void func(void)
		{
			cout<<"space0,nameless"<<endl; 
		}
	}
		
}


int main(void)
{
	space0::func(); 
	return 0;
}

3.4 命名空间的别名

        C++引入命名空间,主要是为了避免成员的名称冲突。如果每个程序员都给自己的命名空间取简短的名称,那么这些命名空间本身也可能发生名称冲突;如果取很长的名称,那么使用起来很不方便。
        C++为此提供了一种解决方案:命名空间别名。

        格式如下:

namespace 别名=命名空间名;

        例如:

namespace CDMA=Code_Division_Multiple_Access;

        一个命名空间可以有多个别名,这些别名以及原来的名称是等价的,可以互换使用。

标签:语言,多态性,namespace,空间,面向对象,命名,using,全局
From: https://blog.csdn.net/shijiyingjie/article/details/137090420

相关文章

  • 如何系统得自学python?(基础知识篇完)——12.面向对象
     一、面向对象为了方便了解,我们拿面向过程做一个对比例如:肚子饿了,想吃饭面向过程:去超市---买菜---卖肉---买米---回家---洗菜---切肉---炒菜---煮米饭---盛饭---开吃面向对象:点外卖总结:⾯向对象就是将编程当成是⼀个事物,对外界来说,事物是直接使⽤的,不⽤去管他内部的情......
  • 老张,你的服务是不是挂了?论全局 SLI 的重要性
    场景再现你正在午休,正梦见中了彩票,突然收到电话告警,说服务对外接口95分位延迟突增,惊出一身冷汗,睡意全无,抓紧打开监控系统,查看服务的SLI指标,发现确实有问题,已经持续1分钟,这服务我刚接手没多久,怎么办?怎么办??对了,告警详情里有SOP预案手册,赶紧打开看看。SOP预案手册里写......
  • 【论文速读】| 对大语言模型解决攻击性安全挑战的实证评估
    本次分享论文为:AnEmpiricalEvaluationofLLMsforSolvingOffensiveSecurityChallenges基本信息原文作者:MinghaoShao,BoyuanChen,SofijaJancheska,BrendanDolan-Gavitt,SiddharthGarg,RameshKarri,MuhammadShafique作者单位:纽约大学、纽约大学阿布扎比......
  • c语言:从键盘输入任意年月,输出该年月的天数(用switch语句完成)
    1.switch语句(1)switch是c语言的关键字,switch()后面使用花括号括起来的部分称为switch语句体。(2)紧跟在switch后一对圆括号中的表达式可以是整形表达式,以及后面的将要学习的字符型表达式等。表达式两边的一对括号不能省略。switch()(3)case也是关键字,与其后面的常量表达式合称cas......
  • C语言程序练习——汉诺塔递归
    1.题目        在终端输入汉诺塔层数n,实现将n层汉诺塔通过三座塔座A、B、C进行排列2.代码#include<stdio.h>inthannuota(intlen,intstr,inttmp,intdst){if(1==len){printf("%c->%c\n",str,dst);}else{h......
  • 区块链编程七大语言,使用最多的竟是Java
    SQL——结构化查询语言(StructuredQueryLanguage)或“Sequel”,是IBM开发的一种编程语言,用于与存储、查询和处理数据的数据库进行沟通。如今SQL约拥有700万名开发者。MySQL、PostgreSQL、SQLServer、DB2、Oracle等主流数据库都使用SQL来开发应用程序。使用SQL的区块链项......
  • 在Go语言中如何正确使用init函数
    1.概念        init函数是用于初始化应用程序状态的函数。既不接收参数也不返回结果,仅仅是一个func()类型的函数。当初始化包时,将对包中所有的常量和变量声明进行计算。然后执行init函数。下面是初始化main包的例子:packagemainimport"fmt"vara=func()int......
  • 抽象的艺术:Go 语言中的编程哲学
    抽象的艺术:Go语言中的编程哲学原创 TimLiu 爱发白日梦的后端 2024-03-2507:00 广东 1人听过 爱发白日梦的后端专注Go语言领域的发展,学习成为更牛逼的架构师,日常分享Go语言、架构、软件工具的使用。179篇原创内容公众号点击上方“名片”,关......
  • R语言K-Means(K均值聚类)和层次聚类算法对微博用户特征数据研究
    全文链接:https://tecdat.cn/?p=32955原文出处:拓端数据部落公众号本文就将采用K-means算法和层次聚类对基于用户特征的微博数据帮助客户进行聚类分析。首先对聚类分析作系统介绍。其次对聚类算法进行文献回顾,对其概况、基本思想、算法进行详细介绍,再是通过一个仿真实验具体来强化......
  • java基础 韩顺平老师的 面向对象(高级) 自己记的部分笔记
     373,类变量引出 代码就提到了问题分析里的3点packagecom.hspedu.static_;publicclassChildGame{publicstaticvoidmain(String[]args){//定义一个变量count,统计有多少小孩加入了游戏intcount=0;Childchild1=newChild(......