c++-为什么说C不能很好的实现数据与操作的分离

问题描述

为什么说C不能很好的实现数据与操作的分离

今天看钱能的教材是,第一章里的第二页中,有写到,程序中的数据与分离不能很好的被C实现了?

解决方案

这主要是说,C不支持面向对象,不能像C++那样定义类,把数据和对应的操作封装成独立的实体。
在C语言中,所有的数据和函数都混合在一起。
但是注意,这个是从语法层面来说的。从设计层面说,你同样可以将数据和操作分离,编写良好风格的C代码,只是你需要更多的代码和更多的注意。你可以人肉去实现面向对象的代码。
相反,用C++也不意味着你一定能做到数据和操作的分离。如果你只定义一个类,并且把所有东西都装进去,那么和C不用对象又一样了。

时间: 2024-08-09 21:07:59

c++-为什么说C不能很好的实现数据与操作的分离的相关文章

用sql语句遍历一个表里异常(时间段内很大或者很小)的数据,并将异常数据修改成相应时间段前的数据

问题描述 用sql语句遍历一个表里异常(时间段内很大或者很小)的数据,并将异常数据修改成相应时间段前的数据 我有一张表,里面3字段id.time.value. 由于value中的部分值异常的大,我想批量修改数据,比如说4.1日-4.20日出现中出现异常大的数据,我想把异常大的数据修改成和他时间段(时间段前或者后)差不多的数据,请问下这个sql应该怎么写啊.我用游标的方法怎么实现.谢谢啊! 解决方案 不知道你的数据库是什么,用MS SQL SERVER示意 建表SQL如下 CREATE TABLE

很厉害的大数据神器终于加入云翼计划了!

大家好,最近,发现了一个很好玩的神器,忍不住出关分享给大家.废话少说,开车! 有些事情可能是你想知道的,往小了说,比如: 某高校单身狗比例 学校附近某酒店套套使用占比 某宿舍的长度排名 以及可怕的数据化大屏: 也许你觉得这些酷炫的可视化效果(当今数一数二的装逼方式)遥不可及,但如果我告诉你,现在你也可以在电脑上一键生成呢? 是的,来自阿里的可视化天团让一键装逼成为了可能,今天我们就来聊聊这个神器:DataV  DataV 是阿里云出品的拖拽式可视化工具,专精于业务数据与地理信息融合的大数据可视化

很全面的Mysql数据库、数据库表、数据基础操作笔记(含代码)_Mysql

 Mysql数据库.数据库表.数据基础操作笔记分享给大家,供大家参考,具体内容如下 一.数据库操作 1.创建数据库 Create database db name[数据库选项]; tip:语句要求使用语句结束符";"来结束服务. 标识符(数据库名)命名规则: 大小写取决于当前操作系统. 见名知意,推荐使用下划线法. 标识符的字符: 使用任意字符,数字,甚至中文.但是一些特殊的组合,例如纯数字组合,特殊符号等需使用标识符限定符来包裹. 限定符:反引号`` 中文可以:但要求客户端编码 在m

命令查询职责分离(CQRS)模式

在常用的三层架构中,通常都是通过数据访问层来修改或者查询数据,一般修改和查询使用的是相同的实体.在一些业务逻辑简单的系统中可能没有什么问题,但是随着系统逻辑变得复杂,用户增多,这种设计就会出现一些性能问题.虽然在DB上可以做一些读写分离的设计,但在业务上如果在读写方面混合在一起的话,仍然会出现一些问题. 本文介绍了命令查询职责分离模式(Command Query Responsibility Segregation,CQRS),该模式从业务上分离修改 (Command,增,删,改,会对系统状态进

Java中利用管道实现线程间的通讯

在Java 语言中,提供了各种各样的输入输出流(stream),使我们能够很方便的对数据进行操作,其中,管道(pipe)流是一种特殊的流,用于在不同线程(threads)间直接传送数据.一个线程发送数据到输出管道,另一个线程从输入管道中读数据.通过使用管道,实现不同线程间的通讯.无需求助于类似临时文件之类的东西.本文在简要介绍管道的基本概念后,将以一个具体的实例pipeapp加以详细说明. 1.管道的创建与使用 Java提供了两个特殊的专门的类专门用于处理管道,它们就是pipedinputstr

Visual C++中实现对图像数据的读取显示

  在利用VC进行数据库编程时,经常需要处理数据库中的图像数据,将该图像从数据库中读取出来并显示,图像数据与文本字段不同,它是作为OLE字段在数据库中存储,通过数据集对象的成员变量自动交换得到的图像数据,得到的数据并不能直接显示,如何处理图像数据,一直是数据库编程中的一个难点,目前关于VC进行数据库编程的资料不少,但很少涉及图像数据的操作,笔者针对一现状,结合自己开发的一个项目,解决了如何显示数据库中的图像这一问题,本文以操作ACESS数据库为例子,讲解一下自己的实现思路,希望对爱好VC编程的朋

Java多线程知识小抄集(一)

本文主要整理博主遇到的Java多线程的相关知识点,适合速记,故命名为"小抄集".本文没有特别重点,每一项针对一个多线程知识做一个概要性总结,也有一些会带一点例子,习题方便理解和记忆. 1. interrupted与isInterrupted的区别 interrupted():测试当前线程是否已经是中断状态,执行后具有状态标志清除为false的功能. isInterrupted():测试线程Thread对象是否已经是中断状态,但不清除状态标志. 方法: public static boo

微服务架构下的分布式数据管理

1.1 分布式数据管理之痛点 为了确保微服务之间松耦合,每个服务都有自己的数据库, 有的是关系型数据库(SQL),有的是非关系型数据库(NoSQL). 开发企业事务往往牵涉到多个服务,要想做到多个服务数据的一致性并非易事,同样,在多个服务之间进行数据查询也充满挑战. 我们以一个在线B2B商店为例,客户服务 包括了客户的各种信息,例如可用信用等. 管理订单,提供订单服务,则需要验证某个新订单与客户的信用限制没有冲突. 在单体应用中,订单服务只需要使用传统事务交易就可以一次性检查可用信用和创建订单.

OLTP类系统数据结转最佳实践

本文着重介绍了京东数据结转平台的技术架构,及OLTP类系统数据结转最佳实践,探讨解决大数据背景下的数据结转问题. 一. 背景介绍 业务系统在长期运行的过程中会积累大量的数据,这些数据有些是需要长期保存的,例如一些订单数据,有些只需要短期保存,例如一些日志信息.业务数据一般都会有一个生命周期,生命周期内的我们叫生产数据,生命周期之外(即业务已经关闭)的叫历史数据,我们这里提到的数据结转,指的是将需要长期保存的历史数据从生产库迁移到历史库(转),而将需要短期保存的数据定期删除(结). 我们已经进入了