编程核心思想概念

编程核心思想和概念
    开发一个程序或一个系统首先都要了解需要哪些输入,输出数据,中间会产生哪些数据,此即数据内容,
    然后缝隙数据键的关系,形成数据模型,此即为数据结构,接着考虑数据在程序或系统中如何传送和变换,此即数据流
1.建模问题:主要是数值计算问题涉及到建模,如建立共识与方程组,而对于非数值计算问题,只要考虑的数据结构问题;
    (数学模型(变量以及逻辑关系)--->抽象数据类型(数据结构))
2.数据结构(问题描述和数据处理的对象);
    数据表示--->数据结构(关系,存,取);数据与数据关系(表,树,图)的线性或者链式存储
3.确定输入,输入的数据(硬件,文件<----> 内存,)及方式(控制台或图形界面的表单)
4.算法:输入到输入的操作与转换
5.程序语言的选择与对数据结构与算法的描述;
    以上各个部分其实没有一个严格的先后顺序,都是相互影响,相互作用
输入到输出方式和算法步骤都是基于相应的数据结构设计的,相应的数据结构要能很方便的将原始问题转换成数据结构中的各个属性,
也要能很方便的将数据结构中的结果以人们能够理解的方式输出,同时,也要为算法转换过程中各个步骤的演化提供便利的支持,
使用线性表还是关联结构,使用树还是图,都是设计输入输出和算法步骤要考虑的问题
    附图三

面向过程与面向对象的区别
    面向过程: 程序=数据结构+算法,以及函数形成模块化(详情请参考图(1);
    面向对象: 程序={对象}(对象=(封装)数据+操作),数据结构和算法体现在类和对象中;
        类同时定义了数据的类型和可使用与这些数据之上的操作,类把数据和函数包含在一起,成为一个整体,这个过程就叫做封装
        
    面向过程与面向对象比较(参考图2)
    
    
数据结构(data structure)
1.逻辑结构:是逻辑结构在存储器中的表现形式(线性存储,链式存储,哈希存储)
    
                顺序存储    结点的逻辑关系由存储单元的邻接关系来体现
                链式存储    结点的逻辑关系由附加的指针字段来表示
    数据存储    索引存储    在存储节点信息的同时,建立附加的索引表,索引项(关键字,地址)
                散列存储    通过函数映射关键字计算出元素存储地址

2.数据运算(数据结构的算法(小算法)):每种逻辑结构都可以归纳一个运算的集合,包括检索,插入,删除,更新,排序;
    数据结构的分类:数据,栈,队列,链表,树,堆,图,集合,哈希表,与映射
        Basic Type = value set + Operation set
        Data Structure = (1) Data Elements + (2)DataLogic Relation + (3)Data Operation;
    1.可以是一个简单的基本数据类型,也可以是基本数据类型+一个或多个指针域
    2.如果2是线性关系:对于3进行特殊定义就有栈,队列等数据结构,对于1进行特殊限制就有字符串等数据结构;
        对于1的数量和类型限定就有数组,广义表等数据结构;
    3.如果2是非线性的层次关系,则是树这种数据结构
    4.如果2是非线性的网状关系,则是图这种数据结构
算法(algorithm)
    算法按照应用分:基本算法,数据结构相关的算法(小算法),数论与代数算法,几何算法,图论算法,动态规划与数值算法,
                    数值分析算法,加密/解密算法,排序算法,查找算法,并行算法,检索算法,随机化算法;
    算法按照思路分:递推(Recurrence)算法,递归算法,穷举算法,贪婪算法,分治算法,动态规划算法,迭代算法,
                    回溯法,分枝界限算法,概率算法。
    算法都遵循特定的额方法和模式,就算法的模式而言,处理各种求最优解问题时,常用贪婪算法,动态规划法等算法模式
        处理迷宫类问题时,穷举模式的枚举算法和回溯算法是常用的模式
    就算法的实现方式而言,如果算法需求频繁的查表操作,name数据结构的设计通常会选择有序表来实现,反过来,
        当设计的算法用到了树和图这样的数据结构时,含有递归结构的方法就长长伴随他们左右
        算法    =    操作 +      控制结构
    算法        操作    操作符:    对特定数据类型的数据处理         
                        算数运算符:加减乘除等运算
                        逻辑运算:  或,且,与,非等运算
                  +        关系运算:     大于,小于,等于,不等于等运算符
                        数据传输:  输入,输出,赋值等运算
                        
                控制结构:    顺序(sequence) ,选择,及循环
                
                
模块与封装
    面向过程的模块化思想:
        函数:功能,输入(局部变量与参数及全局变量),输出(函数带初值的四种方法),输入的数据的操作与转换形成输出(函数内算法);
        一个函数包装一段代码并给予命名,引进参数将其通用化。
        函数的内部观点:关心函数的定义,
            1,采用什么计算方法;
            2.采用什么实现结构;
            3.要求几个参数;
            4.怎样得到所需要的返回值;
        函数的外部观点;关心函数的使用
            1,实现了什么功能,
            2.名字是什么;
            3.要求几个参数,各个参数的意义和作用
            4.返回什么值;
    面向对象的封装:对象的属性,类方法(处理对象的属性,事件触发);

数据存储与访问:
    数据类型,变量,类,对象
    基于值的变量(变量--->值)与基于指正或引用地址的变量(变量-->地址-->值);
    组合数据类型的访问,基于基准元素的地址:
        1.用整数索引,如数组或列表
        2.结构体的指针域
        3.用key索引value,如字典,哈希表,
编程思想
    1.避免冗余:自定义函数和雷,继承,泛型,模板
    2.不重复早轮子:利用内置函数,模板库函数,模板类;
    数据类型,数据表示,数据结构,数据处理;
    数据结构的算法(小算法):对数据元素有如“增,删,改,查”等运算并能保持原有的映射才能对数据进一步的利用。
        方法和函数是一回事,只是它调用在一个值上,例如一个列表值存储在spam中,你可以在这个列表调用index()列表方法
    就像spam.index(‘hello’)一样,方法部分跟在这个值的后面以一个句点分隔
        每种数据类型都有它自己的一组方法,
数据(分类)与数据操作及其结合‘
    基本数据类型    运算符    表达式
    控制,抽象,分解
        基本操作-->组合机制-->抽象机制
    为计算机编写程序,编程者需要从实际问题出发,从高层开始设计程序,人后逐步分解程序功能,凤姐到一定细节程度后,
    就可以用编程语言的已有结构直接描述,与之相对应,编程语言也需要为程序分层构造提供支持,
        1.需要一组基本操作,作为复杂计算活动的基础,计算活动和基础,机器和汇编语言里的基本操作就是各种基本指令
    高级语言也提供和一组基本操作,(基本操作+操作符)
        2.需要一套描述计算的流程,如何进行的组合机制,机器的汇编语言里的基本机制是顺序执行的,以及完成有条件或无条件转换的专门指令
    高级语言也提供一套用于组合简单计算,构造出任意复杂的计算描述的结构(选择和循环等控制结构)
        3.为了支持复杂的开发,高级语言提供了抽象机制,能够把一些复杂的功能包装成一个整体,用于支持程序的分层结构曾粗(函数和类封装)
    在设计程序时,经常需要更具问题的情况,将其划分为顺序的一系列小计算片段,每个片段看做抽象的操作,对每个小片段,
        又可能需要按某种模式进一步分解,采用条件循环控制结构,为了避免冗余,需要使用函数或类封装的抽象机制,让众多的代码先的结构清晰
存储程序概念
    指令代码和数据同等存储的内存,随机访问,
             堆区                全局/静态区      栈区
        运行时动态申请
            c:malloc()         常量区            局部变量
            c++ new                代码区            函数参数
数据分类与操作
    1.基本类型,c语言需要在变量前面声明;
        每一种数据类型都有一个唯一的允许范围及一组允许的操作和函数,
    2.复合类型
        如结构体,先定义结构体,对元素的访问是,先声明结构体变量struct结构体名,在通过结构体变量名,。号去访问结构体成员
        ->,去访问结构体指针
    3.类,先定义类,对类成员的访问是,先声明类实例,在通过是名,。号去访问结构体成员->,去访问结构体指针

计算的抽象:
    编程语言的变量是最基本抽象机制,用于对象命名没算出一个所需要的值,可能要做很多工作,如果不给它命名,用过就丢掉,
再次使用就必须重新计算,至少要花费一些代价,程序也会变的更长,把计算出的值(对象)赋给变量,就为其建立一个抽象,后面再需要
这个值就不需要重新计算只需要写出相应的变量名,就可以方便的使用,这是建立抽象的第一层意义,一次计算,就可以任意多次使用
    函数定义能够建立起一般计算过程的抽象,写一次代码,多次复用,包括对不同的数据做同样的计算,基于一段代码定义一个计算功能
的实体并给予命名,就是定义函数抽象,函数调用也并不是简单重复,因为可以代替不同的参数,
    类是一种更高层次的抽象,数据与数据操作结合更加紧密。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值