毕业设计(论文)-基于IOS的微博设计与应用.doc_第1页
毕业设计(论文)-基于IOS的微博设计与应用.doc_第2页
毕业设计(论文)-基于IOS的微博设计与应用.doc_第3页
毕业设计(论文)-基于IOS的微博设计与应用.doc_第4页
毕业设计(论文)-基于IOS的微博设计与应用.doc_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

盐城师范学院毕业论文(设计)盐 城 师 范 学 院毕业设计基于IOS的微博设计与应用学生姓名 学 院 信息工程学院 专 业 网络工程 班 级 12(2)班 学 号 指导教师 2016年 5 月 16 日盐城师范学院毕业设计基于IOS的微博设计与应用摘 要微博即MicroBlog,一种小型的博客,一个方便用户分享、获取信息的平台。微博具有简单易用、使用便捷的特点。用户可以在任意时间、地点分享或获取信息和图片。另外,传播性快、时效性高的微博受到广大群众的青睐。本论文先简要介绍微博客户端方面的知识,然后着重介绍如何开发苹果手机端的应用。此次的毕业设计是以IOS操作系统作为开发平台,Xcode7.1作为开发环境,并且参照新浪提供的API来设计与实现的。不仅可以查看好友的动态、个人及好友资料,还具有新特性、发微博、评论、转发微博等功能,具备了一般微博所具有的功能,具有较强的实用性。【关键词】IOS平台 iPhone 微博全套设计加扣 3012250582Design and implementation of micro-blog based on IOSAbstractMicroBlog, A small blog, a platform for helping users sharing and picking up information conveniently. Micro-blog has the characteristics of simple and easy to use. Users can share or pick up information and pictures at any time and place. In addition, micro-blog is very popular in the Broad masses because of spreading fast and high efficiency.This article introduces all kinds of knowledge about micro-blog Sina client. Especially, introducing the development and application of iPhone client and explaining the whole process of the design detail. Micro-blog system uses the IOS operating system as a development platform and the Xcode as a developing environment. The design and implementation of Micro-blog client software is based on the API which is provided by Sina. This software not only can view the dynamic, personal and friends information,but also has the function of Expressing, commenting and forwarding the micro-blog. It has the function than then the general micro-blog had and it also has a general micro-blog.Key words IOS iPhone MicroBlog目录1绪论11.1开发背景与意义11.2开发工具及运行环境11.2.1 开发工具11.2.2 运行环境12.1 IOS简介12.2项目所用到的第三方框架23 系统需求23.1功能需求23.2系统使用例图34 系统设计44.1程序总体架构44.2模块功能设计45.1新特性模块55.2授权模块65.2.1 OAuth的两个URL75.2.2 OAuth相关的参数定义75.2.3 OAuth认证授权流程75.3微博首页模块85.3.1 首页页面85.3.2刷新功能115.3.3点击图片查看高清图功能125.4微博详情模块135.4.1 微博详情正文135.4.2微博的评论列表135.5转发微博模块145.6评论微博模块155.7发布微博模块165.8用户信息模块175.9消息模块185.9.1 我的消息185.9.2评论的消息196系统测试206.1授权模块测试用例216.2发表微博测试用例216.3浏览微博测试用例226.4系统评价227总结22参考文献24致 谢251绪论1.1开发背景与意义随着智能手机的飞速发展,人们的交流方式发生了巨大的转变,从最原始的口口相传到如今的发微博、朋友圈,而手机的APP是建设在智能手机上的,其重要性可想而知。人们可以通过手机上的各种APP软件来获取信息、传播信息、相互学习交流,其在不知不觉中已成为传播文化、互相交流的主要方式。手机APP软件在人们生活占有很重要的地位,也与人们生活紧密相连1。这次我所设计的课题就是手机应用中我们经常用的微博,微博具有传播快的特性,它比传统的传播媒体快,让我们能够了解世界的最新动态。我们可以通过微博实时了解朋友和网上的事,关注社会动态和国家大事。微博有点像一个聊天室,它能够拉进人与人之间的交流,促进人与人之间的关系,我们可以在里面分享自己和他人的动态,实时查看自己的朋友圈,同时,当你遇到任何困难时,你也可以发微博寻求帮助,或许就有陌生的好心人能够帮助你2。1.2开发工具及运行环境1.2.1 开发工具(1) 开发工具:Xcode7.1(2) 开发语言:Objective-C1.2.2 运行环境(1) 该软件运行手机的版本为iPhone4及其以上版本。(2) 开发该软件运行的苹果系统为IOS4.3.5及其以上版本。(3) 软件运行手机硬件参数 CPU:苹果A+M9协处理器 2.1GHz; Ram:16GB;屏幕:4.7英寸,7501334像素;2 项目语言简介及框架2.1 IOS简介IOS系统是苹果公司最在与2007年发布的,设计的初衷是为iPhone设计的,后来iPad、Apple TV等产品也用了IOS系统。Objective-C是C语言的升级版3。若初学者使用Objective-C作为开发语言是比较困难的,因为它的写法很难看懂。但有C语言基础的程序员只要肯花一个多月的时间去学习、去摸索就能很好的掌握Objective-C语言了4。2.2项目所用到的第三方框架(1)AFNetWorking:一个第三方的网络请求框架。它不仅具有良好的架构而且还提供了丰富的API,能够进行异步请求,使用起来非常的方便。同时我们也将此框架进行了二次封装,减少代码量,也减少了后期代码更新时的维护量。(2)SDWebImage:一个第三方的图片下载框架。它为我们提供了异步下载图片的方法,很好的处理了图片缓存的问题,以及能够自动清除缓存图片,使用起来也很方便。(3)MBProgressHud:一个网络加载以及提示用户信息的框架。它能够在我们加载一些耗时操作,比如网络请求的时候,能够让用户更加感官的感觉到手机正在处理某些耗时的操作,增加用户体验5。3 系统需求3.1功能需求本次设计的微博客户端软件是基于IOS平台下的,并且程序需在苹果手机上运行调试。本次的程序设计必须实现新特性、获取微博首页信息、查看用户资料、评论及转发微博内容等功能。本客户端数据都是从服务器上获取,所以无需使用数据库。根据系统需求分析,本系统需要实现以下功能:(1) 产品新特性:用户进入APP的时候,用于展示产品新特性的界面。(2) 用户登录授权:当用户首次使用这款软件时,需要对软件进行授权登陆,登录成功后才能进入首页界面。(3) 微博首页:微博首页是微博中最重要的部分,负责展示用户所关注用户发的微博以及动态,是整个微博项目的核心部分。(4) 发布微博:微博软件的基本功能就是发微博,用户可以将自己的动态分享出去,其他用户可以查看到。(5) 查看用户个人信息:用户可以查看个人的姓名,个性签名,微博粉丝数,发微博数以及关注数。(6) 查看微博更新:每次下拉刷新,都能够看到最新的微博数据。(7) 转发微博:微博转发是微博中必不可少的功能,用户可以在转发他人微博内容的同时发表自己的评论,或者就是单纯的转发某条微博,这也是与人交流的一种方式。(8)评论微博:用户可以对每条微博内容进行评论,发表自己的意见。成功评论后,被评论的用户及其他用户均可以看到你写下的评论,这是微博互动的另一种方法。(9)消息:用户可以查看我的消息以及其他人对我微博的评论内容。3.2系统使用例图本软件系统给用户提供了许多操作功能,如:新特性、用户授权、微博首页显示、微博内容查看、新微博的发布、评论及转发他人的微博、查看用户详情等。 如图3-1所示:图3-1系统使用例图4 系统设计4.1程序总体架构软件设计时,考虑到整个系统的延续性和可扩充性,我们将系统应用体系分为三部分:模型Model、视图View、控制器Controller。(1)Model:指数据模型,方便数据的存储;(2)View:指页面中的视图,主要负责界面展示;(3)Controller:指视图控制器,负责控制页面的跳转以及视图的初始化6。4.2模块功能设计基于IOS的微博系统分为新特性、授权、首页、微博详情、发微博、查看用户信息、查看评论列表、查看消息等模块,具体有以下功能:新特性模块:用于展示APP的一些新的特性与功能。授权模块:用户只有在授权的情况下才能对数据与信息进行访问,因此用户授权模块是必不可少的,同时也是软件能正常使用的保证。微博首页:作为微博的主要界面,用户可以浏览所关注的好友微博内容,,实时了解好友的最新动态,也可以点击微博中所发图片查看高清图。用户同时也可以评论或者转发某条微博,每次在下拉刷新的时候也会加载最新的微博数据。转发微博:用户点击微博首页中的微博转发按钮,可以将好友的微博进行转发。评论微博:用户点击微博首页中的评论按钮,即可跳转到评论页面进行评论。微博详情:用户点击某条微博的时候,能够看到当前微博的具体信息,也能够查看到这条微博的评论列表。用户信息:用户可以查看个人的姓名,个性签名,微博粉丝数,发微博数以及关注数。发布微博:用来发布新微博的界面,也可以上传图片。查看消息:可以查看我的微博以及其他用户对我发的微博所进行的评论。其结构图如图4-1所示:微博用户信息发布微博微博详情微博首页查看消息授权模块新特性图4-1微博客户端结构图5项目设计与应用5.1新特性模块用户首次进入应用程序的时候,加载的页面,用于介绍微博的一些新的功能和特性。同时在移动情境中,人机会话时间更加有限,注意力更容易分散。而用户的短期记忆难以保存太多内容,因此,相比于在一个浮层上一次性展示UI当中每个地方的说明,不如一次聚焦在一两个上面。减少说明的焦点可以使用户将注意力放在最重要的说明上。一次展示的说明越少,用户越有可能去阅读并记忆下来。微博新特性如图5-1所示:图5-1微博新特性相关代码如下: application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions/在此方法中设置APP启动的主屏幕。 self.window.rootViewController=newFeature;/设置window的主屏幕为新特性控制器。5.2授权模块微博通过OAuth授权方式来访问用户的数据,通过获取Access_token来获取用户的信息,这样就不会造成用户信息的泄露。OAuth协议具有安全、简易等特点,其安全性主要体现在用户申请获取用户授权的时候,不需要用户名和密码。其简易性体现在该协议为我们提供了各类语言的开发包,方便了程序员,减轻了程序员的工作量7。5.2.1 OAuth的两个URL/oauth2/authorize: 在WebView上请求,获取未授权的页面进行授权,授权后,得到授权成功返回的code。/oauth2/access_token: 通过上一个URL得到的code做参数,得到用户授权后的Access_token(用户授权的唯一标识),Expires_in(Access_token的生命期),Uid(授权用户的UID)等用户的一系列数。5.2.2 OAuth相关的参数定义AppKey:使用者的ID,开发者需要去微博开发平台注册一个应用,再获取该应用的AppKey。AppSecret:密钥。Redirect_url:回调地址,Access_token:最后获取的用户“令牌”,之后的微博数据都是通过它来获取。Expires_in:Access_token的生命周期。Uid:授权成功后用户的id。5.2.3 OAuth认证授权流程OAuth认证授权的两个步骤:(1) 通过WebView请求未授权的界面获取授权后的Code。微博授权界面如图5-2所示:图5-2微博授权页面具体代码如下:self.webView loadRequest:request;/通过WebView加载授权界面。NSEntityDescriptioninsertNewObjectForEntityForName:OAuthEntity inManagedObjectContext:app.managedObjectContext/将获取到的令牌对象存入CoreData数据库。if (app.managedObjectContext save:error) /数据库保存成功。self presentViewController:MainNavController animated:YES completion:nil;/跳转到微博的首页面。5.3微博首页模块5.3.1 首页页面用户在成功获取到授权后将进入本应用的首页,首页的最上方会显示登陆者的名字。下面负责显示的整体是TableView,里面分成很多的TableViewCell,用于微博首页界面的展示,用户可以上下滑动来浏览所关注用户微博的内容。在首页,登陆用户可以查看发微博人的头像、姓名、是否是会员、微博的发布时间、微博的来源、微博上传的图片、转发数、评论数、点赞数,这每个都是Cell的子控件,我们通过返回的数据来计算每个子控件的位置以及大小,最终实现展示效果。在IOS中,我们利用缓存池的机制来管理每一个Cell,它可以将Cell进行重用,来达到管理内存的效果,这样有效的解决了Cell较多时内存溢出的问题8。同时数据和控件比较多,一个Status数据模型并不能满足我们的需求,因此我们需要再定义一个数据模型StatusFrame,里面放每个微博cell的子控件的frame以及Status模型9。为了计算控件位置的方便我们根据发布的内容大致分为以下4种类型。(1) 只发文字的微博:这是最简单的微博类型,在发微博人的头像、姓名、时间、来源的下方,因此,Cell的高度可以通过微博文字内容的最大Y值MaxY来计算。纯文字微博如图5-3所示:图5-3纯文字微博(2) 发文字并上传图片的微博:与发送纯文字的微博相比,这种类型的微博还多出了图片,因此我们的Cell的高度是根据图片的最大Y值MaxY来计算,图片为一个URL类型,需要进行下载。带图片微博如图5-4所示:图5-4带图片微博具体代码如下:HMHttpTool get:UserInfoURL params:dic success:(id responseObj) ./请求获取微博数据。 photoView sd_setImageWithURL:url placeholderImage:UIImage imageNamed:timeline_image_placeholder;/通过SDWebImage框架下载图片。(3) 转发别人纯文字的微博:这种类型的微博相比于上面两种来说比较复杂,因为请求返回的数据中微博是用Status字典存放的,而转发微博是Status字典里面的RetweetStatus字典,所以我们在进行字典转模型的时候,我们需要进行多次的转化,模型里面也需要嵌套模型,使用起来较为复杂,我们将转发微博的整体View背景设置为淡灰色,便于分辨。转发无图微博如图5-5所示:图5-5转发无图微博(4) 转发别人带图片的微博:这与第三种微博相比多了图片,我们的实现方法还是一样,在转发微博里面的正文下方添加一个ImageView,并通过SDWebImage框架异步下载图片10。转发有图微博如图5-6所示:图5-6转发有图微博5.3.2刷新功能用户在TableView的顶部的时候,向下拖动TableView,可以刷新微博数据,显示最新的关注微博。在IOS6.0以后,引入了UIRefreshControl刷新控件,它是作为TableView的子控件使用的。具体代码如下:self.refreshControl addTarget:self action:selector(reloadNewStatus) forControlEvents: UIControlEventValueChanged;/给刷新控件添加下拉方法。self.refreshControl startRefreshing;/开始刷新。self.refreshControl endRefreshing;/结束刷新。newFrames addObject:statusFrame;/ 获取到最新数据后,将新数据插入到旧数据的最前面。5.3.3点击图片查看高清图功能用户在浏览微博图片的时候,可以点击某张图片进行放大并查看其高清图片。实现方法是通过给ImageView添加点击的手势,然后添加一个View在视图上作为容器,在这个View上面在添加具有滑动浏览功能的ScrollView用来放置图片进行浏览,同时,在返回的数据中,微博首页上的小图是缩略图,有一个高清图的URL,通过使用SDWebImage框架异步请求这个URL来下载图片。浏览高清图片如图5-7所示:图5-7浏览高清图片具体代码如下:photoView addGestureRecognizer:recognizer;/给ImageView添加手势。cell.originalPicView.delegate=self;/实现视图View和控制器Controller之间的代理,来实现添加视图并浏览的功能。imgV sd_setImageWithURL:url;/通过SDWebImage下载图片。5.4微博详情模块5.4.1 微博详情正文用户在微博首页浏览微博的时候,可以点击某条微博,查看这条微博的详情并浏览它的微博评论列表,实现方法是首页的控制器实现TableViewCell的代理方法,控制其跳转到微博详情的界面,微博详情界面里面,上方就是微博详情的正文,它的内容与微博首页的Cell样式是一样的,因此我们可以直接复用首页Cell的页面。具体代码如下:-(void)tableView:.didSelectRowAtIndexPath:(NSIndexPath*)indexPath/实现Cell的代理方法,在里面实现具体跳转代码。MainPageStatusCell *cell=MainPageStatusCell cellWithTableView:tableView;/复用首页的Cell。5.4.2微博的评论列表微博详情界面中,用户向下滑动,可以查看这条微博的评论列表,里面有评论人的头像、姓名、评论的内容以及是否是会员,实现方法是通过定义两个不同的Cell的ID,然后进行不同的设置,因为Cell有复用的机制来实现管理内存的方法,所以我们要定义两种ID来防止它的内容被复用。微博评论列表如图5-8所示:图5-8微博评论列表具体代码如下:HMHttpTool get:CommentListURL params:params success:(id responseObj) ./通过微博ID获取微博的评论列表数据。 btn setTitle:NSString stringWithFormat:转发%d,mnetsListArr.count forState:UIControlStateNormal;/获取到评论数后改变评论按钮的评论数。5.5转发微博模块微博首页界面中,每个Cell最下方有三个按钮,最左边的按钮是转发按钮,点击转发按钮,跳转到转发微博的界面。转发微博界面主要由UITextView构成,它负责用户写一些转发这条微博时的心得与感想,写好之后点击右上方的发生按钮即可转发这条微博并发送对这条微博的评论,发送成功后会提示用户发送成功。转发微博如图5-9所示: 图5-9转发微博具体代码如下:HMHttpTool post:RepostWBURL params:params success:(id responseObj) ./通过AFNetWorking框架进行post请求,转发一条微博。 CMHubTool showSuccess:转发微博成功;/转发成功后提示转发成功5.6评论微博模块微博首页界面中,每个Cell最下方有三个按钮中间的按钮是评论按钮,点击评论按钮,跳转到评论微博的界面。评论微博界面主要由UITextView构成,用于写用户的评论内容,写好之后点击发送按钮,发送评论并提示发送的结果,它的实现方法与转发微博的实现方法类似。评论微博如图5-10所示:图5-10评论微博具体代码如下:HMHttpTool post:CommentWBURL params:params success:(id responseObj) ./通过AFNetWorking框架进行Post请求,评论一条微博。NSNotificationCenter.defaultCenter.addObserver:selfselector:selector(textViewChange) name:UITextViewTextDidChangeNotification object:nil;/给TextView添加通知,当其内容发送改变时,改变发送按钮状态,并使其可以点击。5.7发布微博模块发布微博是微博的基本功能,点击首页中下发的添加按钮,即可跳转到发送微博的界面,界面的最上方是取消和发送按钮,中间输入文本的是TextView,IOS为我们提供了UITextViewTextDidChangeNotification这个方法,会监视文本输入框内部文字的变化,通过给文本框添加监听来改变发送按钮的状态,点击发送按钮发布微博,成功后提示微博发布成功。发送微博如图5-11所示:图5-11发送微博具体代码实现:HMHttpTool post:SendWBURL params:params success:(id responseObj) ./通过AFNetWorking框架进行Post请求,发送一条微博。5.8用户信息模块用户信息是展示用户信息的界面,显示用户姓名、头像、个性签名、个人的发微博数、关注数、粉丝数以及是否是会员。其中微博数、关注数、粉丝数为3个按钮,上面显示数量,下面显示文字,实现这种按钮需要通过自定义控件,在其初始化方法中添加两个文本框Label负责数字和文字的显示。用户信息界面如图5-12所示:图5-12用户信息界面具体代码实现:HMHttpTool get:UserInfoURL params:dic success:(id responseObj) ./通过AFNetWorking框架进行Post请求,获取用户的信息。-(id)initWithFrame:(CGRect)frame./自定义按钮,在初始化方法里面初始化子控件。5.9消息模块5.9.1 我的消息在消息模块中,点击我的消息,跳转到我的微博界面,这个界面用于展示到当前登录用户的微博,这个界面的布局与微博首页Cell的布局类型,因此我们可以复用首页的Cell,然后传入不同的数据就可以实现我们需要的功能。我的消息界面如图5-13所示:图5-13 我的消息界面具体代码实现: HMHttpTool get:CallMeWBURL params:params success:(id responseObj) ./通过AFNetWorking框架进行Post请求,获取到我的微博信息。cell.statusFrame=statusF;/将数据传入Cell中。5.9.2评论的消息在消息模块中,点击评论的Cell,跳转到我所发的微博收到的评论,这个界面用于展示我所收到的评论,在Cell中,上方显示的是评论人的信息以及评论的内容,下方灰色背景的是评论登录用户的哪一条微博。我收到的评论界面如图5-14所示:图5-14我收到的评论具体代码实现:HMHttpTool get:CommentMeWBURL params:params success:(id responseObj) ./通过AFNetWorking框架进行Post请求,获取我收到的评论信息。ments=comment;/将数据传入Cell中。6系统测试项目测试能够提高应用程序的稳定性和安全性。在测试阶段要尽可能多的去发现错误,才能及时的去修改它,给用户以最好的用户体验。测试要尽量全面并且高效率,最大限度的去发掘应用程序的潜在问题,同时也要积极的记录测试的数据,这样既便于以后分析问题,又便于以后维护系统11。其流程图如图6-1所示:开始授权登陆授权NO YES浏览微博发布微博转发微博评论微博微博详情结束图6-1测试用例流程图6.1授权模块测试用例用户只有在输入正确的账号及密码才能够授权成功,否则将会登录失败。实施方法如表6-1所示:表6-1授权模块测试用表测试用例测试结果用户账号及密码均错误输入的用户账号有误用户账号错误,密码正确输入的用户账号有误用户账号正确,密码错误输入的用户密码有误用户账号及密码均正确授权成功,进入主页6.2发表微博测试用例在用户发表微博时,首先对微博内容进行非空判定,如该为空,则禁用发送按钮,用户不能发布该条微博。反之,按钮启用,用户可以发布微博。其实施方法如表6-2所示:表6-2发表微博测试用表测试用例测试结果无内容发送按钮禁用,无法发布纯文字发送按钮启用,可以发布含有图片发送按钮启用,可以发布6.3浏览微博测试用例验证用户是否能成功浏览微博。其实施方法如表6-3所示:表6-3浏览微博测试用表测试用例测试结果微博、无图片浏览成功转发微博、无图片浏览成功微博、有图片浏览成功转发微博、有图片浏览成功6.4系统评价本系统不仅拥有简洁美观的界面,还便于用户进行操作。虽然实现了所有的基本功能,但还存在些许的不足,如用户等待时间长、数据处理慢等问题。由于能力欠缺、时间短,将会在以后去解决这些问题,并且开发一些复杂的功能。7总结随着信息时代的到来,我们的生活发生着日新月异的变化,我们时时刻刻都被大量的信息所包围,让我们无法置身事外,同时我们也享受着信息时代给我们带来的便携。微博虽已被广泛应用于人们生活中,但它还很多作用未被发挥,需要我们不断的去发掘它的价值,不断的去创新和完善,我相信以后会有更多的用户喜欢上它。微博是一个融入了很多个性化设计的大平台,本系统着重于完成它的基本功能,其他功能还有待进一步开发。本系统拥有灵活的系统结构,便于以后的开发与维护。我相信只有肯努力,肯创新,一定能创造奇迹、创造价值。在这次的开发中让我学习到了很多,例如MVC的开发模式、代理在视图和控制器直接的使用以及很多第三方框架的使用。虽然毕业设计的内容较多,但我也收获颇丰,和老师的交流让我深刻的认识到自己的不足,找到了自己的缺点并加以改正,同时也让我想问题的角度发生了变化。在这次设计的开发过程中,我积累了很多经验,同时也提高了我的开发及编程能力。参考文献1 Carlo Chung.Objective-C编程之道:iOS设计模式解析,人民邮电出版社,2014,1025-1240.2 陈明亮,邱婷婷,谢莹.微博主影响力评价指标体系的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论