<?xml version="1.0" encoding="ISO-8859-1"?>
<rss version="2.0">
	<channel>
		<title><![CDATA[Últimas mensagens do tópico "diferenças minimas ! VO, TO, DTO, POJO"]]></title>
		<link>http://www.guj.com.br/posts/list/5.java</link>
		<description><![CDATA[Últimas mensagens enviadas no tópico "diferenças minimas ! VO, TO, DTO, POJO"]]></description>
		<generator>JForum - http://www.jforum.net</generator>
			<item>
				<title>diferenças minimas ! VO, TO, DTO, POJO</title>
				<description><![CDATA[ Pessoal<br /> <br /> Quais as diferenças entre VO, TO, DTO e POJO<br /> <br /> O que eu li até agora<br /> VO e TO são absolutamente iquais, sem qualquer diferença... nem mesmo o contexto da situação muda.<br /> <br /> DTO serve para transportar varios TO ou VO, ou seja... vária tabelas ? e pode tb funcionar identico ao VO e o TO.<br /> <br /> POJO parecido com VO e TO, porem este pode conter algumas logicas de negocio.<br /> Por exemplo... POJO no hibernate é identico ao VO e TO, serve para persistir dados do banco de dados.<br /> Porem POJO pode ser tb um javaBean ? contendo getters and setters e mais algumas logicas como por exemplo sacar ou depositar dinheiro.<br /> <br /> Obrigado.]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/31773/170208.java</guid>
				<link>http://www.guj.com.br/posts/preList/31773/170208.java</link>
				<pubDate><![CDATA[Thu, 27 Apr 2006 11:50:08]]> GMT</pubDate>
				<author><![CDATA[ ronildobraga]]></author>
			</item>
			<item>
				<title>diferenças minimas ! VO, TO, DTO, POJO</title>
				<description><![CDATA[ POJO, basicamente, é um objeto normal que não estende ou implementa nenhuma classe ou interface de infra-estrutura (nenhuma classe de framework, por exemplo).<br /> <br /> O resto é enxeção de linguiça e só faz complicar. Pense e programe para objetos, afinal, Java é uma linguagem orientada a objetos e não orientada a value objects, transfer objects ou data transfer objects.<br /> <br /> Os transfers objects você só vai precisar em um contexto bem definido (ambiente distribuído), é totalmente anti-pattern usar fora disso.]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/31773/170212.java</guid>
				<link>http://www.guj.com.br/posts/preList/31773/170212.java</link>
				<pubDate><![CDATA[Thu, 27 Apr 2006 11:59:08]]> GMT</pubDate>
				<author><![CDATA[ ZehOliveira]]></author>
			</item>
			<item>
				<title>Re:diferenças minimas ! VO, TO, DTO, POJO</title>
				<description><![CDATA[ A seguir, o q eu acho.<br /> <br /> POJO, VO, DTO e TO são idênticos porém, POJO é um termo usado mais quando estamos falando de padrões GOF, e VO e TO em padrões J2EE.<br /> <br /> Ambos são usados para transferir Dados entre as camadas. ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/31773/170213.java</guid>
				<link>http://www.guj.com.br/posts/preList/31773/170213.java</link>
				<pubDate><![CDATA[Thu, 27 Apr 2006 12:00:06]]> GMT</pubDate>
				<author><![CDATA[ TiagoFoil]]></author>
			</item>
			<item>
				<title>diferenças minimas ! VO, TO, DTO, POJO</title>
				<description><![CDATA[ POJO é o que você usa para fazer a Matrix <img src="http://www.guj.com.br/images/smilies/8a80c6485cd926be453217d59a84a888.gif" border="0">]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/31773/170242.java</guid>
				<link>http://www.guj.com.br/posts/preList/31773/170242.java</link>
				<pubDate><![CDATA[Thu, 27 Apr 2006 14:45:04]]> GMT</pubDate>
				<author><![CDATA[ renatosilva]]></author>
			</item>
			<item>
				<title>Re:diferenças minimas ! VO, TO, DTO, POJO</title>
				<description><![CDATA[ Quanto a uma definição de POJO, eu fico com a que o Zeh Oliveira citou.<br /> <br /> Quanto ao DTO e TO entendo como o padrão do Core J2EE Patterns, onde estes são utilizados para simplesmente transportar dados de uma camada a outra.<br /> <br /> Quanto ao VO, pelo que entendi lendo o livro Model Driven Design (Eric Evans), é uma forma de citar um objeto com getters e setters,  no entanto com objetivos diferentes de uma entidade. Por exemplo, uma Entidade pessoa pode ter um VO que seja uma classe do tipo Endereco. Dependendo do contexto, pode acontecer do Endereco ser uma entidade mesmo estando relacionado com o aluno. Meu, o negócio é cavernoso! ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/31773/170282.java</guid>
				<link>http://www.guj.com.br/posts/preList/31773/170282.java</link>
				<pubDate><![CDATA[Thu, 27 Apr 2006 20:29:18]]> GMT</pubDate>
				<author><![CDATA[ Thiago Senna]]></author>
			</item>
			<item>
				<title>Re:diferenças minimas ! VO, TO, DTO, POJO</title>
				<description><![CDATA[ A questão que venho me pergutando hoje é:<br /> Será que vale a pena realmente separar a lógica de negócio da classe de atributos ? É purismo OO , ou uma quebra de encapsulação ?<br /> <br /> ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/31773/170297.java</guid>
				<link>http://www.guj.com.br/posts/preList/31773/170297.java</link>
				<pubDate><![CDATA[Thu, 27 Apr 2006 21:56:42]]> GMT</pubDate>
				<author><![CDATA[ Fabricio Cozer Martins]]></author>
			</item>
			<item>
				<title>diferenças minimas ! VO, TO, DTO, POJO</title>
				<description><![CDATA[ É anti-OO. Programando com lógica separada de atributos você não tem muito mais que um aglomerado de funções e algumas structs (bom e velho C). Isso é programação procedural...<br /> <br /> O problema não é purismo, mas as desvantagens que programação procedural traz pro seu modelo - resusabilidade de código baixa é um exemplo.]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/31773/170319.java</guid>
				<link>http://www.guj.com.br/posts/preList/31773/170319.java</link>
				<pubDate><![CDATA[Thu, 27 Apr 2006 23:46:52]]> GMT</pubDate>
				<author><![CDATA[ ZehOliveira]]></author>
			</item>
			<item>
				<title>Re:diferenças minimas ! VO, TO, DTO, POJO</title>
				<description><![CDATA[ [quote=ronildobraga]Quais as diferenças entre VO, TO, DTO e POJO[/quote]<br /> [url=http://www.martinfowler.com/eaaCatalog/valueObject.html]VO[/url] = objeto cuja identidade é baseada nos valores dos seus atributos.<br /> [url=http://http://java.sun.com/blueprints/patterns/TransferObject.html]TO[/url]==[url=http://www.martinfowler.com/eaaCatalog/dataTransferObject.html]DTO[/url] (ou antigo VO) padrão que compõe vários objetos em um de menor granularidade a fim de reduzir o custo em chamadas remotas.<br /> [url=http://www.martinfowler.com/bliki/POJO.html]POJO[/url] =<br /> [quote=ZehOliveira]POJO, basicamente, é um objeto normal que não estende ou implementa nenhuma classe ou interface de infra-estrutura (nenhuma classe de framework, por exemplo). [/quote]<br /> É isso aí.<br /> <br /> [quote=Fabrício Cozer Martins]... vale a pena realmente separar a lógica de negócio da classe de atributos ?...[/quote]<br /> Em geral, você não deve separar a lógica dos dados. Manter isso junto, é um passo para garantir um bom encapsulamento. [url=http://www.fragmental.com.br/wiki/index.php?title=Fantoches]Exemplo?[/url]]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/31773/170330.java</guid>
				<link>http://www.guj.com.br/posts/preList/31773/170330.java</link>
				<pubDate><![CDATA[Fri, 28 Apr 2006 00:34:19]]> GMT</pubDate>
				<author><![CDATA[ TheMask]]></author>
			</item>
			<item>
				<title>Re:diferenças minimas ! VO, TO, DTO, POJO</title>
				<description><![CDATA[ [quote=TheMask]<br /> [url=http://www.martinfowler.com/eaaCatalog/valueObject.html]VO[/url] = objeto cuja identidade é baseada nos valores dos seus atributos.<br /> [/quote]<br /> <br /> [quote=Fowler]A small simple object, like money or a date range, whose equality [b]isn't[/b] based on identity.[/quote]<br /> <br /> Não entendi. Não seria o contrário? VO não é um objeto que representa um valor, como uma data ou dinheiro???]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/31773/170355.java</guid>
				<link>http://www.guj.com.br/posts/preList/31773/170355.java</link>
				<pubDate><![CDATA[Fri, 28 Apr 2006 08:35:01]]> GMT</pubDate>
				<author><![CDATA[ renatosilva]]></author>
			</item>
			<item>
				<title>diferenças minimas ! VO, TO, DTO, POJO</title>
				<description><![CDATA[ [quote=ZehOliveira]É anti-OO. Programando com lógica separada de atributos você não tem muito mais que um aglomerado de funções e algumas structs (bom e velho C). Isso é programação procedural...<br /> <br /> O problema não é purismo, mas as desvantagens que programação procedural traz pro seu modelo - resusabilidade de código baixa é um exemplo.[/quote]<br /> Então temos um duelo entre : <br /> Separação de Atributos da lógica do negócio x Transportar a lógica do negócio para as outras camadas. <br /> <br /> ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/31773/170386.java</guid>
				<link>http://www.guj.com.br/posts/preList/31773/170386.java</link>
				<pubDate><![CDATA[Fri, 28 Apr 2006 09:29:26]]> GMT</pubDate>
				<author><![CDATA[ Fabricio Cozer Martins]]></author>
			</item>
			<item>
				<title>diferenças minimas ! VO, TO, DTO, POJO</title>
				<description><![CDATA[ [quote=Fabrício Cozer Martins][quote=ZehOliveira]É anti-OO. Programando com lógica separada de atributos você não tem muito mais que um aglomerado de funções e algumas structs (bom e velho C). Isso é programação procedural...<br /> <br /> O problema não é purismo, mas as desvantagens que programação procedural traz pro seu modelo - resusabilidade de código baixa é um exemplo.[/quote]<br /> Então temos um duelo entre : <br /> Separação de Atributos da lógica do negócio x Transportar a lógica do negócio para as outras camadas. <br /> <br /> [/quote]<br /> <br /> Como assim?]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/31773/170408.java</guid>
				<link>http://www.guj.com.br/posts/preList/31773/170408.java</link>
				<pubDate><![CDATA[Fri, 28 Apr 2006 09:56:16]]> GMT</pubDate>
				<author><![CDATA[ renatosilva]]></author>
			</item>
			<item>
				<title>diferenças minimas ! VO, TO, DTO, POJO</title>
				<description><![CDATA[ [quote=renato3110][quote=Fabrício Cozer Martins][quote=ZehOliveira]É anti-OO. Programando com lógica separada de atributos você não tem muito mais que um aglomerado de funções e algumas structs (bom e velho C). Isso é programação procedural...<br /> <br /> O problema não é purismo, mas as desvantagens que programação procedural traz pro seu modelo - resusabilidade de código baixa é um exemplo.[/quote]<br /> Então temos um duelo entre : <br /> Separação de Atributos da lógica do negócio x Transportar a lógica do negócio para as outras camadas. <br /> <br /> [/quote]<br /> <br /> Como assim?[/quote]<br /> Com um TO, vc transportaria somente os dados, sem bussiness rules para as outras camadas, e sem TO, vc transportaria os dados, junto com as bussiness rules.<br /> <br /> <br /> <br /> <br /> ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/31773/170410.java</guid>
				<link>http://www.guj.com.br/posts/preList/31773/170410.java</link>
				<pubDate><![CDATA[Fri, 28 Apr 2006 10:00:08]]> GMT</pubDate>
				<author><![CDATA[ Fabricio Cozer Martins]]></author>
			</item>
			<item>
				<title>diferenças minimas ! VO, TO, DTO, POJO</title>
				<description><![CDATA[ [quote=Fabrício Cozer Martins]Transportar a lógica do negócio para as outras camadas. [/quote]<br /> What?]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/31773/170411.java</guid>
				<link>http://www.guj.com.br/posts/preList/31773/170411.java</link>
				<pubDate><![CDATA[Fri, 28 Apr 2006 10:00:31]]> GMT</pubDate>
				<author><![CDATA[ ZehOliveira]]></author>
			</item>
			<item>
				<title>diferenças minimas ! VO, TO, DTO, POJO</title>
				<description><![CDATA[ [quote=ZehOliveira][quote=Fabrício Cozer Martins]Transportar a lógica do negócio para as outras camadas. [/quote]<br /> What?[/quote]<br /> o que eu quis dizer é que na tela, onde os dados seriam apenas para preencher os componentes visuais, os mesmos estariam encapsulados dentro de um objeto apenas, que faz uma operação de negócio complexa, isso claro se vocÊ colocar tudo em um objeto só (sem TO), isso pode quebrar a encapsulação entre camadas.]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/31773/170415.java</guid>
				<link>http://www.guj.com.br/posts/preList/31773/170415.java</link>
				<pubDate><![CDATA[Fri, 28 Apr 2006 10:04:16]]> GMT</pubDate>
				<author><![CDATA[ Fabricio Cozer Martins]]></author>
			</item>
			<item>
				<title>Re:diferenças minimas ! VO, TO, DTO, POJO</title>
				<description><![CDATA[ [quote=TheMask]<br /> [url=http://http://java.sun.com/blueprints/patterns/TransferObject.html]TO[/url]==[url=http://www.martinfowler.com/eaaCatalog/dataTransferObject.html]DTO[/url] (ou antigo VO) padrão que compõe vários objetos em um de menor granularidade a fim de reduzir o custo em chamadas remotas.<br /> [/quote]<br /> <br /> Só um comentário: TO é uma especialização de DTO para EJBs, principalmente Entity Beans. Basicamente um TO não precisa atravessar Camadas, ao contrário de um DTO. Fora deste contexto não há motivo para usar TO, use o termo genérico.]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/31773/170422.java</guid>
				<link>http://www.guj.com.br/posts/preList/31773/170422.java</link>
				<pubDate><![CDATA[Fri, 28 Apr 2006 10:11:48]]> GMT</pubDate>
				<author><![CDATA[ pcalcado]]></author>
			</item>
			<item>
				<title>Re:diferenças minimas ! VO, TO, DTO, POJO</title>
				<description><![CDATA[ [quote=renato3110]<br /> Não entendi. Não seria o contrário? VO não é um objeto que representa um valor, como uma data ou dinheiro???[/quote]<br /> <br /> Se você me emprestar uma nota de R$10,00 e eu te evolver uma nota de R$10,00 você vai se importar com:<br /> <br /> 1) A nota ser a mesma (identidade)<br /> ou<br /> 2) Eu te retornar a quantidade emprestada (valor)]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/31773/170437.java</guid>
				<link>http://www.guj.com.br/posts/preList/31773/170437.java</link>
				<pubDate><![CDATA[Fri, 28 Apr 2006 10:35:46]]> GMT</pubDate>
				<author><![CDATA[ pcalcado]]></author>
			</item>
			<item>
				<title>diferenças minimas ! VO, TO, DTO, POJO</title>
				<description><![CDATA[ Estranho Phillip. Você quer dizer a identidade por referência né? Sim, porque duas notas de dez reais semanticamente são iguais eu penso, certo?]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/31773/170461.java</guid>
				<link>http://www.guj.com.br/posts/preList/31773/170461.java</link>
				<pubDate><![CDATA[Fri, 28 Apr 2006 11:00:52]]> GMT</pubDate>
				<author><![CDATA[ renatosilva]]></author>
			</item>
			<item>
				<title>diferenças minimas ! VO, TO, DTO, POJO</title>
				<description><![CDATA[ [code]Entidade ent1 = new Entidade();<br /> ent1.setCodigo(1);<br /> <br /> Entidade ent2 = new Entidade();<br /> ent2.setCodigo(1);<br /> <br /> Entidade ent3 = new Entidade();<br /> ent3.setCodigo(1);[/code]<br /> Se codigo for a chave da entidade, eles são iguais em termos de Value Object. Isto é, quando se fala de VOs, instâncias diferentes com mesmo valor são consideradas iguais.]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/31773/170465.java</guid>
				<link>http://www.guj.com.br/posts/preList/31773/170465.java</link>
				<pubDate><![CDATA[Fri, 28 Apr 2006 11:08:31]]> GMT</pubDate>
				<author><![CDATA[ ZehOliveira]]></author>
			</item>
			<item>
				<title>diferenças minimas ! VO, TO, DTO, POJO</title>
				<description><![CDATA[ [quote=ZehOliveira][code]Entidade ent1 = new Entidade();<br /> ent1.setCodigo(1);<br /> <br /> Entidade ent2 = new Entidade();<br /> ent2.setCodigo(1);<br /> <br /> Entidade ent3 = new Entidade();<br /> ent3.setCodigo(1);[/code]<br /> Se codigo for a chave da entidade, eles são iguais em termos de Value Object. Isto é, quando se fala de VOs, instâncias diferentes com mesmo valor são consideradas iguais.[/quote]<br /> <br /> EDITADO!<br /> <br /> Não exatamente pelo o que entendo (não apenas com os VOs). Eu posso considerar duas pessoas iguais através de um código como RG ou CPF, mas você chamaria essas pessoas de VOs?<br /> <br /> Um VO é um objeto cuja essência é representar um valor pelo o que entendo, não é apenas um objeto com identidade semântica...]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/31773/170510.java</guid>
				<link>http://www.guj.com.br/posts/preList/31773/170510.java</link>
				<pubDate><![CDATA[Fri, 28 Apr 2006 12:10:17]]> GMT</pubDate>
				<author><![CDATA[ renatosilva]]></author>
			</item>
			<item>
				<title>Re:diferenças minimas ! VO, TO, DTO, POJO</title>
				<description><![CDATA[ Olá,<br /> <br /> A diferença é conceitual:<br /> <br /> VO - Value Object: mapear dados da aplicação. Esses dados podem ser, por exemplo, as tuplas do seu MER ou dados de XML.<br /> <br /> DTO = TO - Data Transfer Object: transferir conjunto de dados entre camadas ou susbsistemas da aplicação. É utilizado quando você precisa transportar dados com relacionamento complexo, o tranporte neste conceito de dá entre:<br /> <br /> - entre camadas do seu sistema;<br /> - entre subsistemas;<br /> - entre a sua aplicação e uma entidade externa.<br /> <br /> O DTO é uma classe que receberá VO's + conjunto de dados e cuidará da associação entre esses dados - para que estejam íntegros na passaem entre as camadas ou subsistemas.<br /> <br /> A primeira vista, pode não parecer, mas esta separação de responsabilidades é importantíssima para um grande projeto.<br /> <br /> POJO - Plain old java object: é uma classe pura java, que não está acoplada(conceito acoplamento OO) a nenhum framework.<br /> <br /> Att,<br /> Emerson Aguiar Noronha<br /> ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/31773/170570.java</guid>
				<link>http://www.guj.com.br/posts/preList/31773/170570.java</link>
				<pubDate><![CDATA[Fri, 28 Apr 2006 14:43:26]]> GMT</pubDate>
				<author><![CDATA[ emersonan]]></author>
			</item>
			<item>
				<title>Re:diferenças minimas ! VO, TO, DTO, POJO</title>
				<description><![CDATA[ <a class="snap_shots" href="http://fragmental.com.br/wiki/index.php?title=Evitando_VOs_e_BOs" target="_blank" rel="nofollow">http://fragmental.com.br/wiki/index.php?title=Evitando_VOs_e_BOs</a>]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/31773/257923.java</guid>
				<link>http://www.guj.com.br/posts/preList/31773/257923.java</link>
				<pubDate><![CDATA[Thu, 4 Jan 2007 01:29:55]]> GMT</pubDate>
				<author><![CDATA[ pcalcado]]></author>
			</item>
			<item>
				<title>Re:diferenças minimas ! VO, TO, DTO, POJO</title>
				<description><![CDATA[ Senhores, acredito que o conceito de VO, TO e DTO tenha ficado claro e a literatura (GOF e JEE Patterns) não deixa dúvida. Mas o conceito do POJO não está claro ainda; aí penso se alguém seria capaz de explicar estes conceitos pensando na arquitetura completa de um projeto? Tentarei começar:<br /> Pensando em JSF:<br /> 1 - JSP submete a página, a requisição é interceptada por um CONTROLADOR(Servlet JSF) e alimenta um BEAN<br /> 2 - Caso existam, os dados são validados por VALIDATORS JSF<br /> 3 - Após a validação são chamados objetos de negócio (POJOs) que fazem o processamento dos dados(sacar, transferir, depositar) e chamam um FACADE para chamar as operações de banco;<br /> 4 - É criado um DAO que mascara as opções de banco (incluir, alterar, excluir e consultar)<br /> 5 - O dado é persistido.<br /> <br /> Lembrando: É "RECOMENDÁVEL"  que o POJO não extenda ou herde de nenhuma classe, mas se o fizer que exteda ou implemente classes e interfaces de negócio, não de infra-estrutura (como frameworks).<br /> <br /> Será que falei alguma coisa errada?<br /> <br /> Um abraço,<br /> Novais.<br /> ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/31773/284826.java</guid>
				<link>http://www.guj.com.br/posts/preList/31773/284826.java</link>
				<pubDate><![CDATA[Thu, 8 Mar 2007 17:31:30]]> GMT</pubDate>
				<author><![CDATA[ novais]]></author>
			</item>
			<item>
				<title>Re:diferenças minimas ! VO, TO, DTO, POJO</title>
				<description><![CDATA[ Bem, resolvi ressuscitar esse tópico pq estava pesquisando sobre o assunto e esbarrei com ele.<br /> <br /> Pela parábola do empréstimo de 10,00 do Philipp, tirei alguma conclusão, mas preciso de certeza. Fui discutir essa pendenga por aqui e, para variar, rolou uma baita divergência de opnião. É muito difícil estudar sobre esses assuntos, principalmente na Internet, pois parece não haver um consenso sobre o assunto.<br /> <br /> Pelo que entendi:<br /> <br /> Entity != VO (ou TO). E NUNCA será igual.<br /> <br /> Basicamente porque Entity, normalmente, possui um [b]ID[/b] que a torna única no sistema. Única em termos de dados, não confundir com o Pattern [i]Singleton[/i]. E isso difere do conceito de VO: [url=http://www.martinfowler.com/eaaCatalog/valueObject.html]fowler[/url]<br /> <br /> Foi a mesma coisa que entendi no artigo da MJ do Sérgio Lopes.<br /> <br /> Essa é a sutileza?<br /> <br /> Abraços.<br /> ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/31773/562201.java</guid>
				<link>http://www.guj.com.br/posts/preList/31773/562201.java</link>
				<pubDate><![CDATA[Wed, 24 Sep 2008 14:48:47]]> GMT</pubDate>
				<author><![CDATA[ celso.martins]]></author>
			</item>
	</channel>
</rss>