您的位置:首页 > 其它

面向过程与面向对象:两种程序设计方式的对比

2018-12-24 15:19 53 查看
版权声明:若要转载文章,请注明文章出处 https://blog.csdn.net/michelleliumei1229/article/details/85233828

       什么是面向过程的程序设计方法?

       面向过程的方法是分析出解决问题或者完成一个事务所需要的步骤,从上往下步步求精,然后用函数把这些步骤一步一步实现,使用的时候依次调用实现步骤的函数就可以了。什么是事务呢?在企业应用软件系统中,一个事务对应一个具体的业务。例如:银行的应用系统中,“取款”是一个业务,“存款”也是一个业务。当程序规模不是很大时,面向过程的方法流程非常清晰,函数的调用顺序就是完成一个事务的操作顺序。

        什么是面向对象?

       面向对象的编程思想是站在现实世界的角度去抽象和解决问题,它把数据和行为都看做是对象的一部分。例如:有一个小超市,需要计算每天的营业额,我们先用面向过程的方法来看看如何设计程序(以下例子中的程序都使用Java语言)。计算当天的营业额就三个步骤,(1)统计今天售卖的每种商品的数量 (2)将每种商品售卖的营业额统计出来 (3)汇总所有售卖产品的营业额

假如今天整个超市就只售卖出了A,B两种商品,那么每个步骤对应一个函数。

public class TestClass {

        int productASoldNum;

        int productBSoldNum;

         

        double productAAmount;

        double productBAmount;

        double amountOfDay;

        void  CountProductSoldNum( ) { //对应步骤(1)

             //计算A,B产品卖出数量

        }

 

        void CaculateProductAmount(double priceA, double priceB) {//对应步骤(2)

               productAAmount = priceA * productASoldNum;

               productBAmount = priceB * productBSoldNum;

        }

 

        void SumAmountOfDay( ) {

               amountOfDay = productAAmount + productBAmount;

         }

 

        public void main(String args[ ] ) {

               CountProductSoldNum( );

               CaculateProductAmount(5.0, 3.0);

               SumAmountOfDay( );

        }

}

在上面的main函数中可以看到,每个函数对应一个解决问题的步骤,函数的调用顺序就是解决问题的顺序。

       如果是使用面向对象的方式,又应该怎样来设计程序呢?前面说过“面向对象的编程思想是站在现实世界的角度去抽象和解决问题”,在“计算超市当天营业额”这个问题中,商品是对应现实世界的实物,将商品的金额累加起来的加法汇总也对应了现实世界中的汇总概念,因此,解决这个问题的程序主要由两个下面两个类来实现:汇总类Add与商品类Product。Product类中包含了名字和价格两个成员属性,这是不是和现实中的商品属性非常的契合。汇总类中的计算商品售卖额(calculateSaleAmount)方法以及汇总(sum)方法就和现实中做商品的售卖金额的算法以及汇总过程是一模一样的。

public class Product {

private String name;

     private float price;

     public Product(String name, float price){

         this.name = name;

         this.price = price;

     }

       

        public String getName() {

                return name;

        }

        public void setName(String name) {

                this.name = name;

        }

        public float getPrice() {

                return price;

        }

        public void setPrice(float price) {

                this.price = price;

        }

       

}

class Sum{

    public static double calculateSaleAmount (double price, int productNum) {

           return price * productNum;

    }

 

        public static double sum(double... accounts) {

                  float sumOfNumbers = 0;

              for (int i = 0; i < accounts.length; i++){

                   sumOfNumbers += accounts[i];

              }

              return sumOfNumbers;

        }

       

        public void main (String args[]) {

                Product productA = new Product("A", 5.0);

                Product productB = new Product("B", 3.0);

               

                double[] productAccounts = new double[2];

                productAccounts[0] = Sum. calculateSaleAmount (productA.getPrice(), 3);

                productAccounts[1] =Sum. calculateSaleAmount (productB.getPrice(), 3);

                double sumOfDay = Sum.sum(productAccounts);

                System.out.println("今日营业额为:" + String.valueOf(sumOfDay));

        }

}

 

       最后我们再看main函数中计算一天的营业额的时候,是先创建了A,B两个商品,然后再根据A,B两个商品的价格和售卖数量,计算出了当天营业额,这个过程与前面使用面向过程的方法来实现程序是不是有了非常大的不同。

       在解决复杂的问题时,面向对象的程序设计方式比起面向过程的设计方式有非常大的优势,主要是程序的扩展性会非常好。比如:现在不仅仅是需要计算每个商品的营业额,还需要计算某个具体牌子的商品营业额。在面向对象的设计中,这个改变非常好修改,直接在Product类中增加一个表示产品品牌的成员变量就行了,但是在面向过程的程序设计当中,如果A产品有两个品牌,那么,所有表示A产品的变量都需要变成两个分别表示两个不同的品牌,例如:productASoldNum 表示A产品售卖数量的变量需要变成productABrandASoldNum、productABrandBSoldNum。如果A产品有N个品牌,面向过程的程序设计方式完全没有办法好好进行工作了。当然,我在这里只是列举了一个极端的例子来说明面向过程与面向对象的程序设计方式有多么的不同。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: