面向对象设计的方法工具

从编程语言直观了解面向对象

各种面向对象编程语言相互有别,但都能看到它们对面向对象三大机制的支持,即: “封装、继承、多态”

  • 封装,隐藏内部实现

  •  继承,复用现有代码

  • 多态,改写对象行为

使用面向对象编程语言(如C#),可以推动程序员以面向对象的思维来思考软件设计结构,从而强化面向对象的编程范式。

C#是一门支持面向对象编程的优秀语言,包括:各种级别的封装支持;单实现继承+多接口实现;抽象方法与虚方法重写。

实例分析:

一、封装:面向对象设计是一种软件设计方法,是一种工程化规范。这是毫无疑问的。面向对象设计的主要工作包括:

  •     确定需要的类;

  •  给每个类提供一组完整的操作

概括地说,面向对象设计就是“根据需求决定所需的类、类的操作,以及类之间关联的过程”。









确定需要的类

我要定义一个数据库操作的类

给每个类提供一组完整的操作

我要一组完整的操作,比如数据库查询,数据的插入,更新,删除等,

用C#来描述这一个概念     
//定义了一个类,这个类是用来操作数据库的。

 

public class do_database

{

    public static string connstr =
ConfigurationSettings.AppSettings["DBConnectionString"];

    ///<summary>

    ///执行查询语句,返回DataSet

    ///</summary>

    ///<param
name="SQLString">查询语句</param>

   
///<returns>DataSet</returns>

    public static DataSet Query(string
SQLString)

    {

        using
(SqlConnection connection = new SqlConnection(connstr))

        {

           
DataSet ds = new DataSet();

           
try

           
{

               
connection.Open();

               
SqlDataAdapter command = new SqlDataAdapter(SQLString, connection);

               
command.Fill(ds, "ds");

           
}

           
catch (System.Data.SqlClient.SqlException ex)

           
{

               
throw new Exception(ex.Message);

           
}

           
return ds;

        }

}

///<summary>

    ///执行查询语句,返回SqlDataReader

    ///</summary>

    ///<param
name="strSQL">查询语句</param>

   
///<returns>SqlDataReader</returns>

    public static SqlDataReader
ExecuteReader(string strSQL)

    {

        SqlConnection
connection = new SqlConnection(connstr);

        SqlCommand cmd
= new SqlCommand(strSQL, connection);

        try

        {

           
connection.Open();

           
SqlDataReader myReader = cmd.ExecuteReader();

           
return myReader;

        }

        catch
(System.Data.SqlClient.SqlException e)

        {

           
throw new Exception(e.Message);

        }

 }

///执行SQL语句,返回影响的记录数

    ///</summary>

    ///<param
name="SQLString">SQL语句</param>

   
///<returns>影响的记录数</returns>

    public static int ExecuteSql(string
SQLString)

    {

        using
(SqlConnection connection = new SqlConnection(connectionString))

        {

           
using (SqlCommand cmd = new SqlCommand(SQLString, connection))

           
{

               
try

               
{

                   
connection.Open();

                   
int rows = cmd.ExecuteNonQuery();

                   
return rows;

               
}

               
catch (System.Data.SqlClient.SqlException E)

               
{

                   
connection.Close();

                   
throw new Exception(E.Message);

               
}

           
}

        }

 }

}

 

这些操作全部封装在do_database类中,这就是封装,隐藏内部实现。比如我要进行查询,结果放在一个DataSet的数据集中,我们就可以这样子操作:

DataSet myds =
do_database.Query(“查询语句”);至于查询语句如何一步一步执行,我们已经在do_databse封装好了。

二、继承:如果用UML的语言讲,继承就是类与类之间的关系是"is a".

上述数据库的操作的类,其实是针对SqlServer数据库的,实际上,我们在软件设计很多时候,要抛开数据库,也就是不管什么样子的数据库,都要能够很快的进行切换。

实际上,不管什么类型的数据库,操作都差不错,无非就是数据库的打开,查询,插入、更新、删除、关闭等。所以这一些是共性,但是每种数据库都有他自己的特性,所以共同的属性和操作我们可以用继承来实现。为了简单起见,我举一个很简单的例子来说明继承这一概念。




 
 

1、            
首先定义一个水果类;

2、            
定义一个橙子类,继承了水果类;

3、            
定义一个苹果类,继承了水果类

publicclassFruit

{

publicDouble重量;

publicString颜色;

privateString私有属性;

publicvoid进货();

publicvoid销售();

}

publicclassOrange :
Fruit

{

Public void Orange()

{

Console.WriteLine("An orange is
got!");

}

}

publicclassApple :
Fruit

{

Public void Apple()

{

Console.WriteLine("An apple is
got!");

}

}

这样子定义的Orange类一样的有 重量、颜色的属性(注意私有属性在Orange中没有),也有进货,销售的操作;但是Orange有了一个Orange()的操作,而这个操作在Fruit中是没有的。这就是继承。

三、多态,多态的含义就是C#中允许多个方法的方法名相同,只要它们的方法签名不同就可以。如果简单一点讲,就是我定义了两个名字一样的方法,但是两个方法的参数不同,我们在调用的时候,程序会根据不同的参数调用不同的方法,这就是多态。当然这是比较通俗的理解,专业描述多态的概念是:当不同的对象接受到相同的消息名(或者说当不同的对象调用相同的名称的成员函数)时,可能引起不同的行为(执行不同的的代码)。这种现象称为多态性。

publicclassTest

{

publicstaticvoid
Print(string str)

{

Console.WriteLine(str);

}

publicstaticvoid Print(int i)

{

Console.WriteLine(i.ToString());//调用ToString方法把整型转换为string类型。

}

publicstaticvoid
Print(bool b)

{

if (b == true)//判断后输出结果。

{

Console.WriteLine("True");

}

else

{

Console.WriteLine("False");

}

}

publicstaticvoid
Print(paramsstring[] str)

{

//这个方法实现了对未知数量的参数的输出。使用params关键字。

for (int i =
0; i < str.Length; ++i)

{

Console.WriteLine(str[i]);

}

}

}

}

下面进行这些函数的调用

publicclassMainClass

{

publicstaticvoid Main()

{

bool a = false;

Test.Print("david","jack","mike");

Test.Print(5);

Test.Print(true);

Test.Print(a);

Test.Print("successful!");

}

}

}

长期的面向对象程序设计,我们隐约可以发现,好像很多东西,基本原理都是一样的,但是程序设计的工作量并没有因为程序设计的熟练度而减低,这个时候,我们可以考虑模式编程了。


式是实践经验的总结,也是一种设计思想的表述形式。在对待模式的态度上,我认为我们不应该抱着学习的态度,而应该抱着“了解”的态度。因为它是经验的总
结,不是靠读书学习就能得到的东西。“在做软件设计的时候,每个人都想使用某种模式来提高软件的韧度,却不是每个人都知道,在他的设计中,已经采用了这种
模式”,谈不谈模式其实都无所谓,只要你能说出你所设计的系统到底好在什么地方。

设计模式简介

每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心。

设计模式描述了软件设计过程中某一类常见问题的一般性的解决方案。面向对象设计模式描述了面向对象设计过程中、特定场景下、类与相互通信的对象之间常见的组织关系。

设计模式与面向对象

面向对象设计模式解决的是“类与相互通信的对象之间的组织关系,包括它们的角色、职责、协作方式几个方面。面向对象设计模式是“好的面向对象设计”,所谓“好的面向对象设计”是那些可以满足“应对变化,提高复用”的设计。面向对象设计模式描述的是软件设计,因此它是独立于编程语言的,但是面向对象设计模式的最终实现仍然要使用面向对象编程语言来表达,本课程基于C#语言,但实际上它适用于支持.NET框架的所有.NET语言,如Visual
Basic.NET、C++/CLI等。面向对象设计模式不像算法技巧,可以照搬照用,它是建立在对“面向对象”纯熟、深入的理解的基础上的经验性认识。掌握面向对象设计模式的前提是首先掌握“面向对象”!所以如果要想总结一些设计模式出来,必须精通面向对象的思想,因为这是一种思想,不是一种技术,需要一定的经验,一定的尝试,一定的运用实践才可以悟出来的。

目前我比较数量掌握的是工厂模式,有关详细的说明,可以看看我在广铁科技2007年第四期发表的一篇文章。这里不做详细阐述。

时间: 2024-10-11 05:06:25

面向对象设计的方法工具的相关文章

完成一个面向对象设计的方法

有可行性的OOP实施方式: 1.写下你关于程序功能的描述,标记出所有的名词.动词和形容词. 2.从被标记出来的名词中寻找潜在的类定义 3.从被标记出来的动词中确定潜在的方法定义 4.从被标记出来的形容词中寻找潜在的属性 5.把方法和属性分配给对应的类 改进设计: 1.列出一系列用例(程序可能被调用的场景),尽可能覆盖全面 2.设想每个用例的每一步会如何有你设计的程序实现,如果有错误或者遗漏,修正掉.然后继续,知道你满意为止. 以上只是宽泛的概要设计,软件工程中的最起始部分. ---Beginni

《软件工程 ——理论、方法与实践》知识概括第八章 面向对象设计

第8章 面向对象设计 分析模型:功能模型.分析对象模型.动态模型. 一.设计的概念 设计活动 设计也是一个建模活动,它在分析模型的基础上完成实现环境的类建模.状态图建模.协作建模.组件建模.部署建模.持久建模和用户界面原型,实现从需求分析到软件实现之间的跨越. 设计活动划分为系统设计和详细设计等两个主要阶段. 将系统模块化就是讲一个复杂的大系统分解成若干个相对简单的较小部分,称为子系统.子系统是一个定义明确的软件组件,它向其他子系统提供多种服务. 对系统进行层次分解,子系统划分为不同的层次,每一

今日笔记:持续集成、面向对象设计方法

今天在importNew中,看到了一篇文章,介绍持续集成的由来.方法.意义. 了解到Grady Booch这位,由Booch方法了解到面向对象设计的三种方法:Booch.Coad.OMT三种方法. http://baike.baidu.com/link?url=MYFBzPSk9BDvcJrCh-AQtVksYOEKsmPi0EBCWcoEifautiqHZYn6mdTUaJy_qxt-VuTADDTMYrWsW8yyLvBmWE10eSZgCFMhIbFvXum7X23 http://blog

面向对象设计原则

七大原则:开闭原则.里氏代换原则.依赖倒转原则.合成/聚合复用原则.迪米特法则.接口隔离原则,单一职责原则. 开闭原则是面向对象的可复用的基石.其他六种原则是手段和工具. 各规则详细(本部分为转载) http://kb.cnblogs.com/page/214010/ 正如牛顿三大定律在经典力学中的位置一样,“开-闭”原则(Open-Closed Principle)是面向对象的可复用设计(Object Oriented Design或OOD)的基石.其他设计原则(里氏代换原则.依赖倒转原则.合

(转载)Java程序员应当知道的10个面向对象设计原则

面向对象设计原则是OOPS编程的核心, 但我见过的大多数Java程序员热心于像Singleton (单例) . Decorator(装饰器).Observer(观察者) 等设计模式,而没有把足够多的注意力放在学习面向对象的分析和设计上面.学习面向对象编程像"抽象"."封装"."多态"."继承" 等基础知识是重要的,但同时为了创建简洁.模块化的设计,了解这些设计原则也同等重要.我经常看到不同经验水平的java程序员,他们有的不知

面向对象设计的11个原则

单一职责原则(The Single Responsibility Principle,简称SRP) 开放-封闭原则(The Open-Close Principle,简称OCP) Liskov替换原则(The Liskov Substitution,简称LSP) 依赖倒置原则(The Dependency Inversion Principle,简称DIP) 接口隔离原则(The Interface Segregation Principle,简称ISP) 重用发布等价原则(The Reuse-

面向对象分析和面向对象设计的区别

http://blog.csdn.net/elegant_design/article/details/9259609 一.总述 面向对象分析的输入是用户的功能需求,输出是简单的.理性化的分析模型,此阶段的工作更多侧重于如何理解软件的功能需求: 面向对象设计的输入是面向对象分析的结果,蔬菜水果最终的.细化后的设计模型,此阶段的工作更多侧重于如何得到一个合适的.完整的解决方案. 二.主要区别 (1)  在侧重点上,面向对象分析侧重于理解问题,描述软件要做什么,而面向对象设计侧重于理解解决方案,描述

Java程序员应当知道的10个面向对象设计原则

面向对象设计原则是OOPS编程的核心, 但我见过的大多数Java程序员热心于像Singleton (单例) . Decorator(装饰器).Observer(观察者) 等设计模式,而没有把足够多的注意力放在学习面向对象的分析和设计上面.学习面向对象编程像"抽象"."封装"."多态"."继承" 等基础知识是重要的,但同时为了创建简洁.模块化的设计,了解这些设计原则也同等重要.我经常看到不同经验水平的java程序员,他们有的不知

OOAD之面向对象设计原则

学习这个设计模式 真的觉得很抽象,只有自己多多的领会! 在很多时候,很多的知识都会觉得讲起来是很矛盾的. 本章目标 1 掌握内聚度和耦合度的概念 2 掌握面向对象设计原则 (一)如何衡量软件设计的质量 内聚度:表示一个应用程序的单个单元所负责的任务数量和多样性.内聚与单个类或者单个方法单元相关.(在我自己的理解就是:在一个类中完成自己所有的任务,这些任务都在自己的类中.) 耦合度:耦合度表示类之间关系的紧密程度.耦合度决定了变更一个应用程序的容易程度.在紧密耦合的类结构中,更改一个类会导致其它的